我有一些NSManagedObjects,我想编写方法来排序和比较它们的属性。
我的问题是,由于Core Data将属性定义为@dynamic,因此无法在编译时引用它们。这意味着使用以下方法装饰NSManagedObject:
- (NSComparisonResult) compareDateAndTime:(Event *) event {
return [originDate compare:[event originDate]];
}
将导致编译器无法找到名为“originDate”的属性。 上面的方法如下所示:
NSArray *events = [[NSArray alloc]
initWithArray:[unsortedEvents sortedArrayUsingSelector:@selector(compareDateAndTime:)]];
我可以使用谓词或fetchedResultController,但我想将它们构建为 我自己的方法,因为每个NSManagedObject都有相同的NSObject。这个NSObject充当一个临时对象,它在NSManagedObject上设置属性然后被持久化之前传递并填充。我还有一些其他功能,比如专门的访问器,我想添加到NSManagedObject。
**(1)**是否有一种通用/最佳实践方法用方法和函数装饰NSManagedObjects **(2)**并且当“重建”实体的类时Xcode不会覆盖它们?
感谢您提供任何帮助或“RTFM”:)
答案 0 :(得分:2)
我经常为我的实体重新生成模型类,所以我在模型类中添加了支持方法(包括瞬态属性的getter实现)作为“支持”类别。
我不需要修改模型类文件,也不可能无意中覆盖我的其他方法。
例如,“Place”实体可能具有名称字符串和纬度/经度数字。它也可能具有名称第一个字母的瞬态属性。这可以用作大表视图中节索引标题的节名称键路径。
Xcode将生成“Place”实体的类文件,如下所示:
Place.h:
#import <CoreData/CoreData.h>
@interface Place : NSManagedObject
{
}
@property (nonatomic, retain) NSString * placeName;
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;
@end
<强> Place.m:强>
#import "Place.h"
@implementation Place
@dynamic placeName;
@dynamic latitude;
@dynamic longitude;
@end
我在“地方”课程上创建了“支持”类别。
<强> PlaceSupport.h 强>:
@interface Place (Support)
- (NSString *)uppercaseFirstLetterOfName;
- (CLLocation*)location;
@end
并在 PlaceSupport.m
中实施答案 1 :(得分:0)
您可以使用objectForKey:
吗?
另一方面,我在代码中直接使用属性没有问题。