0

テーブルビューに問題があります。コアデータベース内のWebサービスから取得したすべてのデータを保存しています。テーブルビューを更新するためのプルダウン機能を実装しました。アプリを初めて起動すると、すべてがうまく機能します。すべてのデータがテーブルビューに表示され、何度でも更新できます。

私が抱えている問題は、アプリが再起動したときに、テーブルビューを自動的に更新したいということです。だから私はこれを私のviewDidLoadに入れました。

- (void)viewDidLoad
{
      [self checkForWIFIConnection];
    if (!self.genkDatabase) {
        NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
        url = [url URLByAppendingPathComponent:@"Default appGenk Database"];
        // url is now "<Documents Directory>/Default Photo Database"
        self.genkDatabase = [[UIManagedDocument alloc] initWithFileURL:url]; // setter will create this for us on disk
    }

     pull = [[PullToRefreshView alloc] initWithScrollView:(UIScrollView *) self.tableView];
    [pull setDelegate:self];
    [self.tableView addSubview:pull];
    [super viewDidLoad];
}

このメソッドは、データベースがまだ作成されているかどうかを調べます。このメソッドの後、次の関数UseDocumentに移動します

- (void)useDocument
{
    if (![[NSFileManager defaultManager] fileExistsAtPath:[self.genkDatabase.fileURL path]]) {
        // does not exist on disk, so create it
        [self.genkDatabase saveToURL:self.genkDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            NSLog(@"no database created yet");
             [self fetchNewsIntoDocument:self.genkDatabase];
           [self setupFetchedResultsController];
        }];
    } else if (self.genkDatabase.documentState == UIDocumentStateClosed) {
        // exists on disk, but we need to open it
        NSLog(@"closed");
        [self.genkDatabase openWithCompletionHandler:^(BOOL success) {
            if([self checkForData] == YES){
                NSLog(@"there is data in viewdidload");
                [self emptyNews];
                [self fetchNewsIntoDocument:self.genkDatabase];
            }
            [self setupFetchedResultsController];

        }];
    } else if (self.genkDatabase.documentState == UIDocumentStateNormal) {
        // already open and ready to use
        [self setupFetchedResultsController];
    }
}

このメソッドが実行するのは、ドキュメントがどの状態であるかを確認することです。アプリの再起動後、ドキュメントは閉じられます。それでは、データがあるかどうかを確認します。ある場合は、すべてを削除して、データベースに再度フェッチします。これも機能します。

問題 私の問題は、画面上の特定の瞬間にあるセルのみが表示されることです。したがって、下にスクロールすると、空のセルが表示されます。下のスクリーンショットでわかるように。

ここに画像の説明を入力してください

このエラーも発生します。

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:1054
2012-12-26 09:34:54.831 Krc Genk[24584:c07] CoreData: error: Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  Invalid update: invalid number of sections.  The number of sections contained in the table view after the update (0) must be equal to the number of sections contained in the table view before the update (1), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted). with userInfo (null)

誰かがこれで私を助けることができることを願っています。

敬具

4

1 に答える 1

0

エラーは明確に定義されており、どこが間違っているのかを把握する必要があります。ITはセクションの数です。

于 2012-12-26T08:36:57.490 に答える