0

+ Core Dataを処理する作業 (学習) をUITableView開始し、それについて何かを読み始めました。その後、ボタンを押すとデータが に表示される小さなサンプル アプリを書き始めましたtableView

私の問題は、正しくプログラムしたことです.Xcodeは警告やエラーなどを表示しませんが、機能しません.

このコードが機能しない理由を誰か教えてもらえますか?

プロジェクト: http://www.sendspace.com/file/ohc1kn

編集:設定しない場合:self.fetchedResultsController.delegate = nil;

次のエラーが表示されます。

2013-02-17 16:45:05.480 tableView+Coredata[1533:207] * -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] でのアサーションの失敗、/SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:6072 2013-02-17 16:45:05.481 tableView+Coredata[1533:207] CoreData: エラー: 重大なアプリケーション エラーです。-controllerDidChangeContent: の呼び出し中に、NSFetchedResultsController のデリゲートから例外がキャッチされました。UITableView dataSource は、tableView:cellForRowAtIndexPath: with userInfo (null) からセルを返す必要があります


コードを使用して NewObject を Database と TableView に挿入します。それを実行すると、上記のエラーが発生します。

// Create a new instance of the entity managed by the fetched results controller.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
// If appropriate, configure the new managed object.
// Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
[newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
// Save the context.
NSError *error = nil;
if (![context save:&error]) {
    /*
     Replace this implementation with code to handle the error appropriately.

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

- (UITableViewCell *)tableView: cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}
4

2 に答える 2

1

1 つの間違いは、tableView パラメータの欠落です。- (UITableViewCell *)tableView: cellForRowAtIndexPath:(NSIndexPath *)indexPath

それを修正してから、正確に何が機能しないか、アプリに何を期待するかを教えてください

于 2013-02-17T15:39:31.827 に答える
0

ここでその他の詳細を提供する必要があります。何が起こっているのかを理解するのは簡単ではありませんが、それまでの間、考慮すべき点はほとんどありません。

まず、registerClass:forCellReuseIdentifier:メソッドを使用していますか?そうでない場合はalloc-init、セルインtableView:cellForRowAtIndexPath:メソッドを使用する必要があります。

tableView:cellForRowAtIndexPath:次に、次のように正しい方法でオーバーライドします

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // your code here...
    return cell;
}
于 2013-02-17T17:16:16.767 に答える