2012-10-17 194 views
0

我總是以同樣的方式從我的web服務獲取我的數據。它一直工作。但現在我得到這個錯誤。無法從我的核心數據庫中獲取數據

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter 
searching for entity name 'Team'' 

這種方法正在崩潰。

- (NSMutableArray *)getDoelmannen 
{ 
    NSLog(@"tot hier doelman"); 
    NSArray *results = [[NSArray alloc]init]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:[NSEntityDescription entityForName:@"Team" 
     inManagedObjectContext:self.genkDatabase.managedObjectContext]]; 
    request.predicate = [NSPredicate predicateWithFormat:@"position ==[c] %@", 
                 @"Doelman"]; 
    NSLog(@"predicate is: %@",request.predicate); 
    NSError *error = nil; 
    NSLog(@"tot hier"); 
    results = [self.genkDatabase.managedObjectContext 
       executeFetchRequest:request error:&error]; 

    return [results valueForKey:@"image"] ; 

} 

對於打開我的數據庫我使用以下方法。

-(void)viewWillAppear:(BOOL)animated 
{ 
    if (!self.genkDatabase) { // we'll create a default database if none is set 
     NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
     url = [url URLByAppendingPathComponent:@"Default appGenk Database"]; 
     self.genkDatabase = [[UIManagedDocument alloc] initWithFileURL:url]; // setter will create this for us on disk 
    } 

} 

- (void)setGenkDatabase:(UIManagedDocument *)genkDatabase 
{ 
    if (_genkDatabase != genkDatabase) { 
     _genkDatabase = genkDatabase; 
     [self 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(@"bestaat niet"); 
      [self getTeam]; 


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

} 

有人能幫助我嗎?

親切的問候。

EDTI

這是非常奇怪的,因爲當我在anohter視圖 - 控制測試方法很有效。唯一的區別是在我的.h文件中,我這樣做。

@interface MultimediaViewController : CoreDataTableViewController 

而在viewController它不起作用它這樣做。

@interface MultimediaViewController : NRGridViewController 

但我仍然沒有像這樣導入它。

#import "CoreDataTableViewController.h" 
+0

這個錯誤明確指出這個實體不存在。我會仔細檢查數據庫文件,刪除所有項目的所有謂詞。一步一個腳印 –

+0

@TraustiThor也沒有謂詞沒有成功 – Steaphann

+0

同樣無效的錯誤? –

回答

0

好吧,所以我嘗試了另一個功能。它的工作。我認爲這可能與我的managedobjectContext有關。這是有用的功能。

- (NSArray *)getDoelmannen 
{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Team"]; 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sortOrder == 1"]; 
    [request setPredicate:predicate]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 

    NSError *error = nil; 
    NSArray *mutableFetchResults = [self.genkDatabase.managedObjectContext executeFetchRequest:request error:&error]; 
    if (mutableFetchResults == nil) { 
     //handle error 
    }else if ([mutableFetchResults count] == 0){ 
     NSLog(@"geen resultaten voor doelmannen"); 
    }else{ 
     //NSLog(@"Name: %@ , position %@",[mutableFetchResults valueForKey:@"name"],[mutableFetchResults valueForKey:@"position"]); 
     return mutableFetchResults; 
    } 
    return mutableFetchResults; 
}