从NSFetchedResultsController获取始终第一行数据

时间:2015-04-16 06:32:16

标签: ios core-data nsfetchedresultscontroller azure-mobile-services

我正在使用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] ];

但不是每次都是。无法判断在哪种情况下,因为这是随机发生的。

请告诉我应该如何解决这个问题。提前谢谢。

1 个答案:

答案 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),请检查您是否可以申请单件物品。