繁体   English   中英

无法从我的核心数据数据库中获取数据

[英]Can't get data from my core-data database

我总是以相同的方式从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];
    }

}

有谁能够帮助我?

亲切的问候。

埃迪

这很奇怪,因为当我在另一个viewcontroller中测试该方法时,它可以工作。 唯一的区别是在我的.h文件中,我这样做。

 @interface MultimediaViewController : CoreDataTableViewController

并且在不起作用的viewController中执行此操作。

@interface MultimediaViewController : NRGridViewController

但是我仍然像这样导入它。

#import "CoreDataTableViewController.h"

好的,所以我尝试了另一个功能。 而且有效。 我认为这可能与我的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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM