【问题标题】:NSManagedObject fault / cannot get 'primitive' object handled by NSManagedObjectNSManagedObject 故障/无法获得由 NSManagedObject 处理的“原始”对象
【发布时间】:2013-12-21 17:39:47
【问题描述】:

我正在为 CoreData 苦苦挣扎。我想获取以下对象:

@interface Email : NSManagedObject {
}

@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *contact;
@end

..并将结果放在 NSMutableArray 中,但将 NSString 内容(不是 NSManagedObjects!)。这是因为我使用的是 json-framework 并且该引擎不允许传递 NSManagedObjects。

这些行 fetch perfom 从 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。我尝试的是在电子邮件 NSManagedObject 中实现一个专用的 getter 函数,该函数复制获取的 NSString 并返回副本。

我知道这是一个常见问题,但是,我的研究并没有在这里找到解决方案。

谢谢, 彼得

【问题讨论】:

    标签: ios nsmanagedobject


    【解决方案1】:

    根据经验,setPropertiesToFetch: 仅在请求返回的对象为字典时才有效。所以你的代码中有几个问题:

    1. 您正在请求特定属性(电子邮件),但尚未将返回类型设置为字典。看看setResultType:
    2. 您仍然需要获取结果并从中提取电子邮件对象。您不能只将结果数组分配给您的 emails 属性。

    试试这个:

    [fetchedRequest setResultType:NSDictionaryResultType];
    NSArray* results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    
    if(error != nil || results == nil) return;
    
    flight.emails = [results valueForKeyPath:@"email"];
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多