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 に答える