Need to Write Core Data Accessors in MacRuby?
Howdy, I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C. To clarify: Suppose I have a data model that models a file structure and which looks like this: Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file } In Objective-C, I would normally have methods in the `Folder` class that would look like: addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects: The methods themselves would use look something like: - (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; } Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice? Thanks, Shannon Love a.k.a TechZen
Hey Shannon, I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question. - Matt On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote:
Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice?
Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby. The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors. I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so? Thanks, Shannon On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon,
I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question.
- Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote: Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice?
Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
On 2011-06-28, at 11:55 AM, Shannon Love wrote:
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby.
The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors.
I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so?
I believe as it's not compiled, attr_accessor just allows read/write. It might be easier to implement the models in objective+c to take advantage of the processors. I'm still new to macruby, Hope it helps, - Rob
Thanks, Shannon
On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon,
I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question.
- Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote: Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice?
Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
I have no experience with Core Data, but if you are looking to make repetitive work easy then don't forget about the metaprogramming possibilities with Ruby. Taking your example, you could create class method like the following: class Model def self.core_data_accessor(name) class_eval(%{ def add#{name}Object(value) changedObjects = NSSet.setWithObject(value) willChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) primitiveValueForKey('#{name}').addObject(value) didChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) end }) end core_data_accessor 'SubFolders' core_data_accessor 'OtherFolders' # etc end HTH On Tue, Jun 28, 2011 at 5:55 PM, Shannon Love <techzen@me.com> wrote:
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby. The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors. I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so? Thanks, Shannon
On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon, I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question. - Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote:
Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice? Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
That’s untested code btw. On Tue, Jun 28, 2011 at 6:08 PM, Eloy Duran <eloy@dekleineprins.me> wrote:
I have no experience with Core Data, but if you are looking to make repetitive work easy then don't forget about the metaprogramming possibilities with Ruby. Taking your example, you could create class method like the following:
class Model def self.core_data_accessor(name) class_eval(%{ def add#{name}Object(value) changedObjects = NSSet.setWithObject(value) willChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) primitiveValueForKey('#{name}').addObject(value) didChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) end }) end
core_data_accessor 'SubFolders' core_data_accessor 'OtherFolders' # etc end
HTH
On Tue, Jun 28, 2011 at 5:55 PM, Shannon Love <techzen@me.com> wrote:
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby. The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors. I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so? Thanks, Shannon
On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon, I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question. - Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote:
Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice? Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Value must be a pointer when passed value_to_pointer = Pointer.new(:object) value_to_pointer.assign(value) Regards, - Rob On 2011-06-28, at 12:08 PM, Eloy Duran <eloy@dekleineprins.me> wrote:
I have no experience with Core Data, but if you are looking to make repetitive work easy then don't forget about the metaprogramming possibilities with Ruby. Taking your example, you could create class method like the following:
class Model def self.core_data_accessor(name) class_eval(%{ def add#{name}Object(value) changedObjects = NSSet.setWithObject(value) willChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) primitiveValueForKey('#{name}').addObject(value) didChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) end }) end
core_data_accessor 'SubFolders' core_data_accessor 'OtherFolders' # etc end
HTH
On Tue, Jun 28, 2011 at 5:55 PM, Shannon Love <techzen@me.com> wrote:
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby. The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors. I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so? Thanks, Shannon
On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon, I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question. - Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote:
Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice? Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Oops, thanks for the fix :) On 28 jun 2011, at 18:21, Robert Lowe wrote:
Value must be a pointer when passed
value_to_pointer = Pointer.new(:object) value_to_pointer.assign(value)
Regards, - Rob
On 2011-06-28, at 12:08 PM, Eloy Duran <eloy@dekleineprins.me> wrote:
I have no experience with Core Data, but if you are looking to make repetitive work easy then don't forget about the metaprogramming possibilities with Ruby. Taking your example, you could create class method like the following:
class Model def self.core_data_accessor(name) class_eval(%{ def add#{name}Object(value) changedObjects = NSSet.setWithObject(value) willChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) primitiveValueForKey('#{name}').addObject(value) didChangeValueForKey('#{name}', withSetMutation:NSKeyValueUnionSetMutation, usingObjects:changedObjects) end }) end
core_data_accessor 'SubFolders' core_data_accessor 'OtherFolders' # etc end
HTH
On Tue, Jun 28, 2011 at 5:55 PM, Shannon Love <techzen@me.com> wrote:
I'm not to the point of wiring up the UI yet. I will employ bindings when I do so but at the moment I am creating a complex data model using NSManagedObject subclasses with lots of customized behaviors. I do this all the time in Objective-c but I am uncertain how to go about doing so in MacRuby. The @dynamic processor in Objective-C 2.0 autogenerates attribute and relationship accessors except for the to-many relationship convenience methods but obviously MacRuby has no such capability. I don't think the `attr_accessor ` in ruby will generate the proper core data accessors. I suppose my real question is: Do we have to write all the accessors like we used to do in the early days of Core Data in Objective-s 1.0 or is there some functionality in ruby or MacRuby that obviates the need to do so? Thanks, Shannon
On Jun 27, 2011, at 5:55 PM, Matt Aimonetti wrote:
Hey Shannon, I'm not sure I fully understand, but you should be able to just set the accessor and do the binding via Xcode as shown here: http://ofps.oreilly.com/titles/9781449380373/_core_data.html Let me know if that doesn't answer your question. - Matt
On Mon, Jun 27, 2011 at 3:45 PM, Shannon Love <techzen@me.com> wrote:
Howdy,
I've Core Data a lot in Objective-c and now I am trying to use it in MacRuby. It occurs to me that I might need to create the to-many relationship accessors just like you have to do in Objective-C.
To clarify: Suppose I have a data model that models a file structure and which looks like this:
Folder{ name:string parent<<-->Folder.subFolders subFolders<-->>Folder.parent files<-->>File.folder } File{ name:string folder<<-->Folder.file }
In Objective-C, I would normally have methods in the `Folder` class that would look like:
addSubFoldersObject: removeSubFoldersObject: addSubFoldersObjects: removeSubFoldersObjects:
The methods themselves would use look something like:
- (void)addSubFoldersObject:(FetchedPropertyExtractor *)value { NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1]; [self willChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [[self primitiveValueForKey:@"SubFolders"] addObject:value]; [self didChangeValueForKey:@"SubFolders" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects]; [changedObjects release]; }
Do you have to do the same thing in MacRuby or will the normal ruby set operations suffice? Thanks, Shannon Love a.k.a TechZen
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
participants (5)
-
Eloy Duran
-
Eloy Duran
-
Matt Aimonetti
-
Robert Lowe
-
Shannon Love