我已经花了几个小时在这个问题上,我似乎找不到解决办法。首先,关于我有哪些方面的一些规范:
我有一个团队实体的模型。在应用程序中,有一个teams视图控制器,它从后端加载团队。后端返回JSON数组,其中包含team ID。我将该ID存储在模型中的" ID“字段中,在迭代服务器响应时,我查找给定ID的团队是否已经存在。如果是这样的话,我只更新它的信息,并传递对象,如果没有-我首先创建它。
这就是它变得奇怪的地方。这在90%的时间里起作用。我可以加载Team控制器,在应用程序中更进一步,回到控制器(再次加载数据),大多数情况下一切都很好。然而,偶尔,我的fetch请求将不会返回任何内容。如:
NSArray *results = [context executeFetchRequest:request error:&error];将返回空数组,而错误也为空。服务器上的任何东西都不会改变。当我尝试调试它时,请求如下:
<NSFetchRequest: 0x127a0e20> (entity: Team; predicate: (id == "123"); sortDescriptors: ((null)); limit: 1; type: NSManagedObjectResultType; )当我在外部应用程序中预览sqlite存储时,我可以看到这个ID的团队项目是存在的,在其他90%的时间里,它确实会被加载。更奇怪的是,当我打开SQLDebug时,我可以看到:
2013-04-12 12:00:27.934 SportLink[10831:c07] CoreData: annotation: fetch using
NSSQLiteStatement <0x12656d10> on entity 'Team' with sql text 'SELECT 0, t0.Z_PK,
t0.Z_OPT, t0.ZACI1, t0.ZACI2, t0.ZACI3, t0.ZALTFIRSTNAME, t0.ZALTSECONDNAME, t0.ZCOLOR1,
t0.ZCOLOR2, t0.ZGENDER, t0.ZICON, t0.ZID, t0.ZLOCATION, t0.ZLOGO1, t0.ZLOGO2, t0.ZNAME,
t0.ZTYPE, t0.ZSPORT FROM ZTEAM t0 WHERE t0.ZID = ? LIMIT 133' returned 6 rows这意味着备份存储实际上获取了数据,但由于某种原因并没有传递数据。现在:
对这里到底发生了什么有什么想法吗?
编辑:我用仪器分析了这个应用程序。我刚输入了有问题的VC,然后输入它的子控制器并离开,重复了几次,直到问题开始显现出来。以下是结果。也许从这里可以更容易地知道发生了什么:

发布于 2013-04-15 11:14:59
经过几天的调查,我终于找到了这个错误的原因。获取团队实体的代码如下所示:
Team *team = [Team findFirstByAttribute:WSK_ID withValue:data[WSK_ID] inContext:moc];WSK_ID只是@"id"的一个定义。data是我从RestKit获得的一个字典,它来自JSON响应。因为它没有被转换成任何类型,所以它可能是一个NSString,而Team实体的id属性需要NSNumber。虽然我不知道它有时只失败了什么,但是将这个部分更改为:
Team *team = [Team findFirstByAttribute:WSK_ID withValue:@([data[WSK_ID] intValue]) inContext:moc];也就是说,将ID字符串转换为int,然后用NSNumber对其进行装箱,解决了问题。
https://stackoverflow.com/questions/15969079
复制相似问题