0

我有错误 - CoreDate 无法完成从.. 检索数据的错误。应用程序Item *currentItem = (Item *)[self.fetchedObjectsArray objectAtIndex:currentItemIndex]在下面的代码中立即崩溃。但是,它确实显示了几个提要,然后崩溃了。重现错误也很困难,即使它确实被重现,它也会在收到不同数量的提要后崩溃。有谁知道我将如何调试这样的问题?

- (void) showNextFeed {
if ([self.fetchedObjectsArray count] <= 0) 
     return;
if (feedAnimating) 
     return;

feedAnimating = YES;

//start off the left of the screen
self.newsTitleView.center = CGPointMake(-self.newsTitleView.frame.size.width * 0.5, self.newsTitleView.center.y);

//start off the right of the screen
self.newsItemTitleLabel.center = CGPointMake(self.view.frame.size.width + self.newsItemTitleLabel.frame.size.width * 0.5, self.newsItemTitleLabel.center.y);

//update the content
currentItemIndex = (currentItemIndex + 1 < [self.fetchedObjectsArray count]) ? (currentItemIndex + 1) : 0;
Item *currentItem = (Item*)[self.fetchedObjectsArray objectAtIndex:currentItemIndex];
self.newsTitleView.backgroundColor = [UIColor colorWithHexString:currentItem.belongsTo.color];
self.newsFeedTitleLabel.text = currentItem.belongsTo.feedTitle;
self.newsItemTitleLabel.text = currentItem.itemTitle;
4

1 回答 1

1

您首先应该确保currentItemIndex(我认为是类 ivar)已正确初始化。可能值得检查它在哪里被操纵。

也是如此fetchedObjectsArray。它还在哪里被改变,改变和你的方法会相互干扰吗?

实际上,该错误表明核心数据中的某个项目在视图仍然需要时已被删除或更改(就像您的 upshowNextFeed方法中的情况一样)。

最后,您是否考虑过使用NSFetchedResultsController? 使用它,线程和错误检查要容易得多,您可以将大部分棘手的持久性存储更新和获取留给核心数据,而不是维护自己的结果数组。(你已经有很多代码只是为了检查你是否越界......)

于 2012-07-04T12:26:26.000 回答