NSManagedObject共享属性

时间:2015-01-13 13:46:50

标签: ios

我刚刚建立了一个简单的Core Data数据库,我创建了一些具有一些属性的实体。但是,某些实体具有一些共同的属性,例如Date参数。到现在为止我做了类似的事情:

NSManagedObject * passedObject...

if ([_passedObject.entity.name isEqual:@"Archive"]){
    Archive* fileObject = (Archive *)_passedObject;
    myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:fileObject.fileData];
}else{
    AllFiles* fileObject = (AllFiles *)_passedObject;
    myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:fileObject.fileData];
}

fileData对两者都是通用的,所以我只想做passObject.fileData而不是转换类型。可以这样做吗?

1 个答案:

答案 0 :(得分:2)

定义协议......

@protocol FileDataProvider

@property (strong,nonatomic) NSData* fileData;

//or -(NSData *)fileData; would be suitable for RO access

@end

并使您的对象符合该协议

@interface Archive:NSManagedObject< FileDataProvider >

@property (strong,nonatomic) NSData* fileData;

@end


@interface AllFiles:NSManagedObject< FileDataProvider >

@property (strong,nonatomic) NSData* fileData;

@end

因此你可以这样投射

myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:((id<FileDataProvider>)passedObject).fileData];

或更安全

if([passedObject conformsToProtocol:@protocol(FileDataProvider)]) {
    myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:((id<FileDataProvider>)passedObject).fileData];
}
相关问题