我刚刚开始使用Swift,通常在Objective-C中为每个NSManagedObject子类创建一个类别,因此每次生成子类时都不会删除该类别。此外,它可以简化CoreData对象的创建,尤其是在来自JSON的数据填充时。
示例:
我的NSManagedObject子类:
@class Book;
@interface Book : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * author;
@property (nonatomic, retain) NSString * plot;
@end
其“助手”类别实施:
+ (Book*)bookFromDictionary:(NSDictionary *)dictionary inContext:(NSManagedObjectContext *)context {
Book *book = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Book"];
request.predicate = [NSPredicate predicateWithFormat:@"name == %@", dictionary[@"name"]];
request.fetchLimit = 1;
NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];
if (!result || error) {
NSLog(@"Error getting Book : %@", error.localizedDescription);
} else if ([result count] == 0) {
book = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:context];
} else {
book = [result lastObject];
}
self.name = dictionary[@"name"];
self.author = dictionary[@"author"];
self.plot = dictionary[@"plot"];
return book;
}
我试图在Swift中重现这个概念,但我不知道如何。 似乎扩展替换了Swift中的类别,但是如果我在Swift中实现NSManagedObject子类的扩展,那么每次我必须生成NSManagedObject子类时它都会被删除(因为它在同一个文件中......)。这就是我曾经在Obj-C中创建类别的原因。
有人可以告诉我在Swift中有什么好的做法吗?
我非常感谢任何帮助!
答案 0 :(得分:2)
Swift扩展是为NSManagedObject
子类定义其他方法的正确方法。
您可以将扩展名放入单独的文件中
(例如" BookExtensions.swift")这样它们就不会被覆盖了
" Book.swift"在Xcode中重新创建。
答案 1 :(得分:0)
在Swift中为NSManagedObjects
生成子类时存在问题。通常,您必须再次手动查看它们,例如将类型更改为选项,包括@objc(Class)
等标记。
因此,我已经更改了我的工作流程:现在我在生成的文件中包含自定义方法,而不使用使用extension
(这是Swift等效的类别)。更新我的托管对象模型时,我只是通过添加,重命名,更改等属性和关系来稍微更改文件。