Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用NSManagedObject objectID:用作记录筛选、联接表等的主键是否安全?_Objective C_Ios_Core Data_Primary Key - Fatal编程技术网

Objective c 使用NSManagedObject objectID:用作记录筛选、联接表等的主键是否安全?

Objective c 使用NSManagedObject objectID:用作记录筛选、联接表等的主键是否安全?,objective-c,ios,core-data,primary-key,Objective C,Ios,Core Data,Primary Key,对于我的每个核心数据实体,我是否需要有明确的自定义ID属性作为PK?我知道核心数据使用自己的数据,我们可以从[NSManagedObject objectID]获取它 我以前的项目是使用原始SQLite完成的,但现在我正试图转移到核心数据。目前,在我的核心数据原型中,我正在使用我的自定义ID列筛选记录: [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"my_id=%d",some_id_value]]; 好奇的是,我是

对于我的每个核心数据实体,我是否需要有明确的自定义ID属性作为PK?我知道核心数据使用自己的数据,我们可以从[NSManagedObject objectID]获取它

我以前的项目是使用原始SQLite完成的,但现在我正试图转移到核心数据。目前,在我的核心数据原型中,我正在使用我的自定义ID列筛选记录:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"my_id=%d",some_id_value]];

好奇的是,我是应该为自定义ID属性而烦恼,还是应该依赖内部objectID列:到处传递,用于过滤、连接表等?

coredata背后的整个思想是避免低级sql。正如在每一个现代ORM中一样,您不应该为内部对象ID而烦恼。起初,这可能看起来有点尴尬(特别是如果您来自一个强大的sql背景),但相信我,用这种方式管理对象图要容易得多。总之,设计您的NSManagedObject和关系,让coredata在所有ID上发挥其魔力。

虽然这肯定是对这个特定请求的一个很好的回答,但在一些特定情况下,您需要通过ID引用核心数据对象:例如,编写同步引擎。此外,多线程核心数据的某些方式要求在线程之间传递对象ID。也就是说,一般来说(对于查询、获取等),您不需要使用ID。@AmyWorrall Tottall完全同意您的看法。谢谢你的澄清。谢谢,但是我应该如何按标识符过滤对象呢?这是最常见的事情:抓取具体对象(记录)和保存具体对象(记录)。您建议如何替换我当前的代码(setPredicate,my_id)?尽管如此,我仍然不明白如何在不将某些标识符映射到表id的情况下更新、选择和删除具体的对象。通过对象id筛选对象对您来说绝对重要吗?为什么不根据它们的属性(例如:
firstName,比如'Mark'
grade==7
)通过谓词获取它们呢。此外,一旦您在两个实体之间创建了关系,您也可以对它们使用谓词(例如:
ALL children.age>12
将获取您对其执行获取请求的实体的所有12岁以上的子实体(例如个人实体),前提是您已在名为“children”的个人中创建了一对多关系)。标识符始终是标识符,在应用程序中只传递一个值和使用一个值更新/删除更方便、更轻量级。此外,按ID获取记录总是比按某些两列获取记录快,因为ID(PK)总是基于索引的。否则,您将需要显式地在其他列上创建另一个索引,以加快此类查询,这将是多余的。我来自繁重的数据库开发背景,没有ID我就看不到我的生活:)