新しいアイテムをUITableViewの下部に追加しています。アイテムを挿入した後、UITableViewを一番下までスクロールして、 。新しい項目はコアデータに保存され、UITableViewはNSFetchedResultsControllerを使用して自動的に更新されます。scrollToRowAtIndexPathを使用して最後にUITableViewCellにスクロールします。atScrollPosition:NSFetchedResultsControllerDelegateメソッドを使用してアニメーションを行います。
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
switch (type) {
case NSFetchedResultsChangeInsert:
NSLog(@"*** controllerDidChangeObject - NSFetchedResultsChangeInsert");
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
//THIS IS THE CODE THAT DOESN'T WORK
[self.tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
break;
....
}
これは境界外のエラーにつながります。私はそれを機能させるようには見えません。インデックスパスの行を調整して2番目のコメントまでスクロールすることはできますが、最後のアイテムには到達できません。
基本的には、コメントの表にコメントを追加しています。コメントが追加された後、その表を最新のコメントにスクロールします。この場合に役立ちます
ありがとう@tammo!これは完全に機能しました! – djblue2009
'newIndexPath'という名前のプロパティを作成すると、ビルドエラーが生成されます: '所有しているオブジェクトを返すためのCocoa命名規則に従います ' プロパティの名前をちょっと変えてください] –
:Dこれはコンパイラこれについて不平を言っていませんでした。 'newIndexPath'を' insertedIndexPath'に変更します。 –