我正在努力使用CoreData。我想获取以下对象:
@interface Email : NSManagedObject {
}
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *contact;
@end
..并将结果放在NSMutableArray中,但是NSString内容,(不是NSManagedObjects!)。这是因为我使用的是json-framework,并且该引擎不允许传递NSManagedObjects。
这些行获取来自CoreData的提取
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Emails" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:@"email"]];
NSError *error = nil;
NSMutableArray *fetchedObjects = [[NSMutableArray alloc] init];
fetchedObjects= [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
flight.emails=fetchedObjects;
'flight'对象声明如下:
@interface Flight : NSObject {
NSMutableArray *_emails;
}
@property (nonatomic, retain) NSMutableArray *emails;
使用此代码,我收到了CoreData错误。我尝试了其他一些实现变体,但实际上从未在flight.emails中设置过NSString对象,但始终是NSManagedObjects。我尝试的是在Email NSManagedObject中实现专用的getter函数,该函数复制获取的NSString并返回副本。
我认为这是一个常见的问题,但是,我的研究并没有在这里找到解决方案。
谢谢, 彼得
答案 0 :(得分:1)
根据经验,setPropertiesToFetch:
仅在请求返回的对象为词典时有效。所以你的代码中有几个问题:
setResultType:
。试试这个:
[fetchedRequest setResultType:NSDictionaryResultType];
NSArray* results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if(error != nil || results == nil) return;
flight.emails = [results valueForKeyPath:@"email"];