Coredata和Cordova在ios 10和11中

时间:2017-10-10 12:49:24

标签: ios cordova core-data ibm-mobilefirst ios10

下面的代码完全适用于本机环境,但如果我在Mobile首次生成的应用程序中使用它,它会崩溃。此外,它只发生在使用iOS 10 SDK编译项目时,直到iOS 9 SDK才能正常工作。

发送给已解除分配的实例Core Data iOS 10 Mobile First 7.1的消息

每次尝试通过NSManagedObjectContext执行请求时,我都会收到以下错误。

*** - [_ PFArray count]:发送到解除分配的实例0x1c524f060的消息

以下是代码:

NSError *error = nil;
NSArray *matches = [self processFetchRequest:fetchRequest error:&error];
if( matches.count > 0 ){
    toReturn = (User*)[matches objectAtIndex:0];
}



where:



- (nullable NSArray*) processFetchRequest:(NSFetchRequest*)fetchRequest error:(NSError**)error{

    __block NSArray *matches = nil;

    @synchronized (self) {

        NSManagedObjectContext *context = [self managedObjectContext];
        [context performBlockAndWait:^{

            matches = [context executeFetchRequest:fetchRequest error:error];
        }];
    }

    return matches;
}

- (NSManagedObjectContext *)managedObjectContext
{

    NSManagedObjectContext *context = _managedObjectContext;

    if ( context == nil ) {

        NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
        if (coordinator != nil) {
            _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
            [_managedObjectContext setPersistentStoreCoordinator:coordinator];
        }
    }


    return _managedObjectContext;
}


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }


    NSURL *storeURL = [self getStoreURL];    
    NSError *errorMetadata = nil;

        NSError *error = nil;
        _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSDictionary *storeOptions = @{NSPersistentStoreFileProtectionKey  : NSFileProtectionCompleteUntilFirstUserAuthentication};

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                   configuration:nil
                                                             URL:storeURL
                                                         options:storeOptions
                                                           error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}

0 个答案:

没有答案