我正在使用microsoft azure web services广告核心数据模型创建一个iOS项目。我也正在进行离线同步。在响应中我将始终获得单行,但在cellforRow AtIndexPath方法的屏幕上显示输出时,我正在写下面的代码行
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath:indexPath];
指出在第I项中将有响应重写当前索引路径。但是要一直从行获取数据,我将indexPath设置为0,但在此行之后,我的代码崩溃并给出以下响应
*"Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'"*
我也尝试过以下方式
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:<#(NSInteger)#> inSection:<#(NSInteger)#>] ];
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForRow:<#(NSInteger)#> inSection:<#(NSInteger)#>] ];
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: 0 ];
但都是徒劳的。以上错误消息每次都会出现。 (服务器正在正确响应并返回数据。我已经检查过了)。
有时提供正确数据的唯一代码是
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:0 inSection:0] ];
但不是每次都是。无法判断在哪种情况下,因为这是随机发生的。
请告诉我应该如何解决这个问题。提前谢谢。
答案 0 :(得分:0)
当数据库中没有任何内容时它会失败,因此当您提问时,fetch控制器没有任何结果。假设您已静态设置要显示的行数或具有显示的简单静态视图,因此您永远不会实际检查获取控制器具有的部分和行数。
对于这些行:
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:<#(NSInteger)#> inSection:<#(NSInteger)#>] ];
你需要完成参数,但是假设你确保有一个项目可以使用它。
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForRow:<#(NSInteger)#> inSection:<#(NSInteger)#>] ];
如上所述。
NSManagedObject *item = [self.fetchedResultsController objectAtIndexPath: 0 ];
您无法传递一个预期对象的简单整数。您将收到编译错误,告诉您相同的内容。
至少使用if ([self.fetchedResultsController fetchedObjects].count > 0)
,请检查您是否可以申请单件物品。