我有一个NSManagedObject子类与CoreDataGeneratedAccessors如下:
- (void)addCoursesObject:(Course *)value;
- (void)removeCoursesObject:(Course *)value;
- (void)addCourses:(NSSet *)value;
- (void)removeCourses:(NSSet *)value;
Run Code Online (Sandbox Code Playgroud)
使用上面的访问器添加或删除对象时,我需要运行一些其他代码.
我实际上想在实现文件中做这样的事情:
-(void)addCoursesObject:(Course *)value {
[super addCoursesObject:value];
… my additional code here … }
Run Code Online (Sandbox Code Playgroud)
但是super没有意义,因为NSManagedObject没有"-addCourseObject".在课程中添加一个观察者NSSet似乎也许是一种方法,但我宁愿只实现自己的访问器,然后定义它是如何工作的,就像实现@synthesized访问器超出默认行为时一样.
有没有办法调用原始行为,类似于上面的'[super ...'行?
思考?其他方法?
谢谢.
复制到剪贴板功能似乎在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];
}
Run Code Online (Sandbox Code Playgroud)
并且您需要替换<#Capitalized relationship name#>,<#Relationship destination class#>和<#Relationship name#>,然后添加您的自定义代码.(因为我使用ARC,我还必须删除[changedObjects release].)
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |