我正在与 CoreData 作斗争。我想获取以下对象:
@interface Email : NSManagedObject {
}
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *contact;
@kết thúc
..并将结果放入 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;
“航类”对象声明如下:
@interface Flight : NSObject {
NSMutableArray *_emails;
}
@property (nonatomic, retain) NSMutableArray *emails;
使用这段代码,我遇到了 CoreData 错误。我尝试了一些其他的实现变体,但从未真正设法在flight.emails中拥有NSString对象,但总是NSManagedObjects。我尝试的是在 Email NSManagedObject 中实现一个专用的 getter 函数,该函数复制获取的 NSString 并返回副本。
我认为这是一个常见问题,但是,我的研究尚未在此问题上找到解决方案。
谢谢,彼得
根据经验,setPropertiesToFetch:
仅在请求返回的对象为字典时有效。所以你的代码中有几个问题:
- 您正在请求特定属性(电子邮件),但尚未将返回类型设置为字典。看看
setResultType:
.
- 您仍然需要获取结果并从中提取电子邮件对象。您不能只将生成的数组分配给您的电子邮件属性。
Hãy thử điều này:
[fetchedRequest setResultType:NSDictionaryResultType];
NSArray* results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if(error != nil || results == nil) return;
flight.emails = [results valueForKeyPath:@"email"];
Tôi là một lập trình viên xuất sắc, rất giỏi!