0

私は最初のIOSアプリケーションを作成し、データの取得と保存にJSONとコアデータを使用しています。

しかし、何らかの理由でそれは開かないでしょうNSDocument。これが私がしていることです。

- (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(@"test1"); 
            [self setupFetchedResultsController];
            NSLog(@"test12");
            [self fetchFlickrDataIntoDocument:self.genkDatabase];

        }];
    } else if (self.genkDatabase.documentState == UIDocumentStateClosed) {
        NSLog(@"test2"); 
        // exists on disk, but we need to open it
        [self.genkDatabase openWithCompletionHandler:^(BOOL success) {
            NSLog(@"test4");
            [self setupFetchedResultsController];
            NSLog(@"test5");
        }];
    } else if (self.genkDatabase.documentState == UIDocumentStateNormal) {
        NSLog(@"test3");
        // already open and ready to use
        [self setupFetchedResultsController];
    }
}

- (void)setupFetchedResultsController // attaches an NSFetchRequest to this UITableViewController
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"News"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"News.title" ascending:YES]];
    // no predicate because we want ALL the Photographers

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.genkDatabase.managedObjectContext
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];
    NSLog(@"test10");
}

私のログを見ると、次のことがわかります。

テスト2テスト4テスト10テスト5

ご覧のとおり、正常に開きます。次に、メソッドを実行しsetupFetchedResultsControllerます。しかし、その後突然停止します。エラーは発生しません。

通常は、fetchFlickrDataIntoDocumentメソッドに移動する必要があります。

誰か助けてくれませんか?

4

1 に答える 1

0

このメソッド [self fetchFlickrDataIntoDocument:self.genkDatabase]; は、DBが存在しないときに呼び出す必要があるため、ディスクのドキュメントディレクトリ内に作成する必要があると思います。テストを実行しているとき、DBはすでに存在していて、まだ開かれていないので、プログラムはそれを開こうとします。基本的には、条件文に従うだけです:if (self.genkDatabase.documentState == UIDocumentStateClosed)fetchFlickrDataIntoDocument:selfDBが存在しない場合にのみ発生するため、プログラムがを呼び出す必要がある理由がわかりません。

于 2012-10-01T14:11:55.620 に答える