3

メイン ビュー コントローラーが読み込まれ、呼び出されるとviewDidLoad、フェッチ リクエストが実行され、配列またはコア データ オブジェクトが破棄されます。

+ (NSArray *)getData {

    // Fetch Data
    NSError *error = nil;
    if (![[[AppDelegate instance] fetchedResultsController] performFetch:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    NSArray *items = [[AppDelegate instance].fetchedResultsController fetchedObjects];
    return items;

}//end

何らかの理由で、 から呼び出されると空の配列が返されviewDidLoadます。

同じメソッドを呼び出すと、viewDidAppear:正しく機能しNSArrayCoreDataオブジェクトの を返します。

これが で機能しない理由はありviewDidLoadますか?

編集:

フェッチされた結果コントローラーのメソッド:

/**
 * The controller the gets our results from core data
 *
 * @version $Revision: 0.1
 */
- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    // Create and configure a fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"SiteConfig" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    // Create the sort descriptors array
    NSSortDescriptor *sectionTitle = [[NSSortDescriptor alloc] initWithKey:@"createdDate" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sectionTitle, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    self.fetchedResultsController = aFetchedResultsController;
    fetchedResultsController.delegate = self;

    // Memory management

    return fetchedResultsController;

}//end
4

1 に答える 1

1

私の推測では、ビュー コントローラーは MainWindow.xib の一部であるため、アプリ デリゲートがコア データ コンテキストの準備を整える前に、その viewDidLoad が呼び出されます。

画面を離れて戻った場合に新しいデータを取得できるように、とにかくこれを viewWillAppear で実行することをお勧めします。もう 1 つのオプションは、アプリ デリゲートが fetchedResultsController に応答するようにすることです。

于 2012-07-04T19:55:30.733 に答える