【问题标题】:How to get object reference in Core Data?如何在 Core Data 中获取对象引用?
【发布时间】:2014-05-22 13:18:27
【问题描述】:

有一个实体,我从 JSON 填充数据,假设它是 PhotographerPhoto。两者都有一些数据,我使用循环填充并管理 ObjectContex ..

这样,

NSMutableArray *ArrPhotographer= [[self.M3Arr objectForKey:@"LifeMag"]objectForKey:@"Photographer"];

for (int i = 0; i< ArrPhotographer.count; i++) {
 Photographer *  photographerObj = [NSEntityDescription insertNewObjectForEntityForName:@"PhotographerData"
                                               inManagedObjectContext:[self managedObjectContext]];
    NSMutableDictionary *tpDict = [cleanerListArr objectAtIndex:i];
    photographerObj.cleanerName = [tpDict objectForKey:@"photographerName"];
}

现在我已经为摄影师和照片实体完成了这项工作,根据这张图片,我的杂志实体拥有该表中已经存在的数据。如图所示,我与杂志的照片和摄影师建立了一种关系。

现在的问题是,

如果表中已经存在摄影师姓名,如何将其与杂志实体连接。我需要那个特定位置的托管对象引用。

(例如,现在有三位摄影师 Ron、Harry 和 Sunny 对于 Photo Cover1 我想要 Ron 的名字。然后我在预填充时需要 Ron 的对象引用)。​​

如何获取这个对象的引用?

// **************** 编辑

我得到了对象存在...但是没有如何获取对象和 2)如何将其提供给上述 x 和 y?

I am using this code to saving the data in Magazine

    Magazine *magObj = [NSEntityDescription insertNewObjectForEntityForName:@"Magazine"
                                                    inManagedObjectContext:[self managedObjectContext]];

    magObj .issueID=[NSNumber numberWithInt:1];
    magObj .photo= x;
    magObj .photographer = y;
#### 编辑 2
   NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Cleaner"];
    [request setPredicate:[NSPredicate predicateWithFormat:@"cleanerName = %@", @"Robin"]];
    [request setFetchLimit:1];
    NSUInteger count = [[self managedObjectContext] countForFetchRequest:request error:nil];
    if (count == NSNotFound){

        NSLog(@"ERROR FOund");
    }
    // some error occurred
    else if (count == 0){

        NSLog(@"no matching object");
    }
    // no matching object
    else{

        NSLog(@"Found Match");

    }

【问题讨论】:

    标签: ios objective-c core-data entity-relationship iphonecoredatarecipes


    【解决方案1】:

    您需要使用NSFetchRequest 在上下文中搜索要连接的适当对象。提取请求指定要搜索的实体类型,您需要添加 NSPredicate 以将结果过滤为您感兴趣的特定名称。

    请注意,您可以使用名称列表运行单个提取请求,这样您只需访问数据存储一次以获取信息,然后在对象创建/连接循环期间使用返回的列表。

    如果您要一次性加载所有数据,那么您可以创建一个包含托管对象实例的字典,这样您就可以链接到它们而无需获取。

    【讨论】:

    • 再次感谢您的帮助 :) .. 我有一个问题,像 tableview 我可以从 indexpath.row/indexpath.coulmn.. 在这个实体中获取任何数据,我不能得到那个 perticuler 对象在某个地方?这个 [NSManagedObject objectID] 会有帮助吗?
    • 不,数据存储 (MOC) 没有索引,它是一袋内容。索引路径可用于数组或 FRC(但仅因为这是一个排序的提取)。 objectID 是内部标识符。如果您已经拥有objectID,那么您可以直接请求关联的对象...
    • 所以,正如您所建议的,NSFetchRequest 搜索上下文以查找要连接的适当对象……这与我们从任何实体获取数据的请求相同吗? (例如,我知道我必须添加名称“Ron”,那么我是否应该获取摄影师的所有数据并检查“Ron”是否存在,然后获取该特定对象及其关系?这是正确的还是其他方式?)
    • 是的,但是将谓词添加到提取中,以便在数据存储中完成过滤。然后你得到的结果数组应该是空的(不匹配,创建一个新项目)或包含一个条目(匹配,连接关系)。如果数组有多个条目,那么您有重复...
    • 好吧,那我认为从杂志到摄影师和照片的关系是错误的。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2018-09-06
    相关资源
    最近更新 更多