2012-10-01 83 views
0

我正在製作我的第一個IOS應用程序,並使用JSON和核心數據獲取和存儲我的數據。NSDocument不會打開

但由於某種原因,它不會打開它的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

正如你可以看到它打開它succefully。然後執行方法setupFetchedResultsController。但之後它突然停止。我沒有得到任何錯誤。

它通常應該做的是去fetchFlickrDataIntoDocument方法。

有人可以幫我嗎?

回答

0

我相信這個方法[self fetchFlickrDataIntoDocument:self.genkDatabase];應該在你的數據庫不存在的時候被調用,所以你想在你的磁盤上創建一個文檔目錄。當你運行你的測試時,你的數據庫已經存在,並且剛剛沒有打開,所以你的程序試圖打開它。你基本上只是遵循條件語句:if (self.genkDatabase.documentState == UIDocumentStateClosed)。我不明白爲什麼你的程序應該調用fetchFlickrDataIntoDocument:self,因爲它應該只發生在你的數據庫不存在的時候。