Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Ios 将NSPredicate应用于多对多关系将返回0个值_Ios_Objective C_Core Data_Nspredicate_Nsfetchrequest - Fatal编程技术网

Ios 将NSPredicate应用于多对多关系将返回0个值

Ios 将NSPredicate应用于多对多关系将返回0个值,ios,objective-c,core-data,nspredicate,nsfetchrequest,Ios,Objective C,Core Data,Nspredicate,Nsfetchrequest,假设实体Store与我的实体Offer存在对多关系(Offer),那么从Offer到Store之间应该存在反向关系。然后,您通过offerID获取Offer,只需访问Offer的Store属性即可访问代码中的存储 我怀疑这在数据库上比在谓词中使用更容易 您甚至可以对此进行一点改进。如果在获取报价时将报价与门店之间的反向关系指定为预取关系,则在访问报价时,您将节省一次访问数据库的时间。在获取后存储。我遵循了@MartinR给出的建议(在评论中)。似乎这些优惠已损坏,并且有一个nilofferID

假设实体
Store
与我的实体
Offer
存在对多关系(
Offer
),那么从Offer到Store之间应该存在反向关系。然后,您通过offerID获取Offer,只需访问Offer的Store属性即可访问代码中的存储

我怀疑这在数据库上比在谓词中使用更容易


您甚至可以对此进行一点改进。如果在获取报价时将报价与门店之间的反向关系指定为预取关系,则在访问
报价时,您将节省一次访问数据库的时间。在获取后存储

我遵循了@MartinR给出的建议(在评论中)。似乎这些优惠已损坏,并且有一个nil
offerID


@Alexei的答案并没有解决我的问题,但遵循他的建议是一个很好的线索,即创建从提供到存储的反向关系。

如果获取所有对象,然后使用该谓词过滤数组,会发生什么?这会给出预期的结果吗?-而且你真的应该添加反向关系。我不知道它是否IX解决了这个问题,但还有更多的原因。@MartinR如果对象的数量太多,它将增加太多的内存使用。这不是首选的方法。@santhu:这只是为了隔离问题,而不是作为最终解决方案。@MartinR带谓词的筛选数组不起作用。我的数组包含20个对象,筛选数组包含0对象。@Jipé:如果筛选提取的数组也会得到0个对象,则没有与提取请求匹配的对象。遵循Alexei的建议可能解决了您的损坏问题。没有反向关系(同时忽略警告)是核心数据灾难的秘诀。这些关系是需要的。我同意,这就是为什么我遵循他的建议,创建了一个反向关系:)你确定它没有解决你的问题吗?它应该起作用,而且应该做得更快。
[NSPredicate predicateWithFormat:@"ANY offers.offerID == %@", _offer.offerID];
details: SQLite bind[0] = "51dbc2b94eb8dd9a7d00000d"
2014-01-09 11:30:11.169 ****[39542:70b] CoreData: annotation: sql connection fetch time: 0.0011s
2014-01-09 11:30:11.170 ****[39542:70b] CoreData: annotation: fetch using NSSQLiteStatement <0xd50f3a0> on entity 'Store' with sql text 'SELECT DISTINCT t0.Z__AF_RESOURCEIDENTIFIER FROM ZSTORE t0 JOIN ZOFFER t1 ON t0.Z_PK = t1.Z7OFFERS WHERE  t1.ZOFFERID = ? ORDER BY t0.ZORDERNUMBER LIMIT 24' returned 0 rows with values: (
)
<Store: 0x12149350> (entity: Store; id: 0xd6bb210 <x-coredata://135F3A30-4BC6-4428-8D19-8D3EEBBE8173-39447-0000BC0D17888C74/Store/p__af_5097ffad4eb8dd720d02211f> ; data: {
    {…}
    offers =     (
        "0x12145c20 <x-coredata://135F3A30-4BC6-4428-8D19-8D3EEBBE8173-39447-0000BC0D17888C74/Offer/p__af_offer_51dbc2b94eb8dd9a7d00000d>"
    );
    {…}
})