ユーザーが編集を押したときに、挿入コントロール(緑色プラス)を含む行をテーブルビューに追加しようとしています。これまでのところ、私が見るに挿入行を持っているが、ユーザーはそれが編集モードのときにテーブルビューをスクロールしようとすると、アプリは次のエラーでクラッシュ:私はsimilar questionことを知っているテーブルビューに行を追加すると、アプリがクラッシュするのはなぜですか?
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[_PFArray objectAtIndex:]: index (9) beyond bounds (9)'
前に尋ねられましたが、私がプログラミングに新しいので、もう少し手持ちが必要かもしれません。その質問への答えは、numberOfRowsInSectionが適切に更新されていることを確認することを提案しました。私は私のことだと思っていますが、私は明らかにどこかで間違いを犯しています。
これは、私のUINavigation Controllerのルートビューコントローラである私のテーブルビューコントローラでこれまでに得られたものです。現時点では、それは単なるダミーのテーブルです - 編集ボタン以外のものは何も接続されていません。
#import "RootViewController.h"
#import "AppDelegate_iPhone.h"
#import "Trip.h"
@implementation RootViewController
@synthesize trips = _trips;
@synthesize context = _context;
- (id)init
{
self = [super init] ;
if (self)
{
automaticEditControlsDidShow = NO;
}
return self ;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Trip" inManagedObjectContext:_context]];
NSError *error;
self.trips = [_context executeFetchRequest:fetchRequest error:&error];
self.title = @"Trips";
[fetchRequest release];
// Display an Edit button for this view controller.
self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int rows = [_trips count];
if (tableView.editing) rows++;
return rows;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
Trip *info = [_trips objectAtIndex:indexPath.row];
if (tableView.editing)
{
if (indexPath.row == 0)
cell.textLabel.text = @"Add New Trip";
if (indexPath.row == !0)
cell.textLabel.text = info.tripName;
}
else
{
cell.textLabel.text = info.tripName;
}
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
int row = indexPath.row;
if (self.editing && row == 0) {
if (automaticEditControlsDidShow)
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleDelete;
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
automaticEditControlsDidShow = NO;
[super setEditing:editing animated:animated];
NSArray *addRow = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:0 inSection:0],nil];
[self.tableView beginUpdates];
if (editing) {
automaticEditControlsDidShow = YES;
[self.tableView insertRowsAtIndexPaths:addRow withRowAnimation:UITableViewRowAnimationLeft];
} else {
[self.tableView deleteRowsAtIndexPaths:addRow withRowAnimation:UITableViewRowAnimationLeft];
}
[self.tableView endUpdates];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
[_trips release];
[_context release];
[super dealloc];
}
@end
ありがとう!
私は本当に興味があります、その '==!0'構文はどこから来たのですか?それは本当にあなたがしたいことをやっていませんが、なぜあなたがそれを書いたのか知りたいのですが... – jv42