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

別のビューコントローラーでメソッドをテストすると機能するため、非常に奇妙です。唯一の違いは、これを行う .h ファイルにあります。

 @interface MultimediaViewController : CoreDataTableViewController

そして、それが機能しないviewControllerでは、これが行われます。

@interface MultimediaViewController : NRGridViewController

しかし、私はまだこのようにインポートしました。

#import "CoreDataTableViewController.h"
4

1 に答える 1

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;
}
于 2012-10-17T09:37:36.223 に答える