我有一个带有CoreDataGeneratedAccessors的NSManagedObject子类,如下所示:
- (void)addCoursesObject:(Course *)value;
- (void)removeCoursesObject:(Course *)value;
- (void)addCourses:(NSSet *)value;
- (void)removeCourses:(NSSet *)value;
使用上面的访问器添加或删除对象时,我需要运行一些其他代码。
我实际上想在实现文件中执行类似的操作:
-(void)addCoursesObject:(Course *)value {
[super addCoursesObject:value];
… my additional code here … }
但是super没有意义,因为NSManagedObject没有“-addCourseObject”。在课程中添加一个观察者NSSet似乎也许是一种方法,但我宁愿只实现自己的访问器,然后定义它是如何工作的,就像实现@synthesized访问器超出默认行为时一样。
有没有办法调用原始行为,类似于上面的'[super ...'行?
思考?其他方法?
感谢。
答案 0 :(得分:7)
复制到剪贴板功能似乎在Xcode 4中消失了。另一种方法是转到代码段库(View / Utilities / Code Snippet Library)并将其中一个“Core Data xxx Accessors”拖到.m文件中。你会得到这样的方法:
- (void)add<#Capitalized relationship name#>Object:(<#Relationship destination class#> *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"<#Relationship name#>" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"<#Relationship name#>"] addObject:value];
[self didChangeValueForKey:@"<#Relationship name#>" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}
您需要替换&lt; #Capitalized relationship name#&gt;,&lt; #Relationship destination class#&gt;和&lt; #Relationship name#&gt ;,然后添加您的自定义代码。 (因为我使用ARC,我还必须删除[changedObjects release]。)
答案 1 :(得分:4)
您无法覆盖访问者,只需在.m文件中编写自己的访问者。
在数据模型编辑器中,如果选择关系,则可以从上下文菜单中选择“将Objective-C 2.0实施复制到剪贴板”。这将为您提供访问者的功能框架。然后,您可以轻松自定义它们。