3

我正在尝试检查我的 coredata 存储中是否有任何数据作为我的应用程序的一种恢复。基本上,如果用户处于最终视图中,那么 coredata 中的一些数据会不断更新。

所以他们在最终视图中,然后应用程序中断或将其置于睡眠状态,然后应用程序从内存中删除。

下次加载应用程序时,我检查我的 coredata 对象以查看是否有任何值如果有我提示用户告诉他们有未完成的工作你想从你离开的地方继续新鲜。

如果他们想重新开始,我会转储我核心数据中当前的所有内容并允许他们工作。否则我跳到最后一个视图,加载 coredata 中的数据并允许它们继续工作。

然而,这是发生错误的地方,我像这样检查我的核心数据。

NSMutableArray *checkFinMutableArray = [coreDataController readFin];

    if ([checkFinMutableArray count] > 0) {
        //Show mesage, recover or not?
        UIAlertView *alert = [[UIAlertView alloc] init];
        [alert setTitle:@"Selected projects avalible"];
        [alert setMessage:@"It appears that you have unfinished projects from a previous session. Would you like to continue working on these projects?"];
        [alert setDelegate:self];
        [alert addButtonWithTitle:@"Yes"];
        [alert addButtonWithTitle:@"No"];
        [alert show];
    }

这就是我的 coredata 对象的样子

 - (NSMutableArray *)readFinDimensions {
        NSManagedObjectContext *context = [self managedObjectContext];


        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];

        NSError *error;

        NSMutableArray *projectDictionaryArray = [[NSMutableArray alloc] init];


        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];


        for (ProjectList *projectList in fetchedObjects) {

            NSMutableDictionary *tempProjectDictionaryArray = [[ NSMutableDictionary alloc] init];

            [tempProjectDictionaryArray setObject:project.proj forKey:@"Proj"]; // this is where the ap dies
            [tempProjectDictionaryArray setObject:project.desc forKey:@"Desc"];

            [projectDictionaryArray addObject:tempProjectDictionaryArray];
        }

        return projectDictionaryArray;
    }

这就是错误的样子

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: Proj)'

任何帮助将不胜感激。

4

2 回答 2

2

可能是您的代码必须是:

    for (ProjectList *projectList in fetchedObjects) {

        NSMutableDictionary *tempProjectDictionaryArray = [[ NSMutableDictionary alloc] init];

        [tempProjectDictionaryArray setObject:projectList.proj forKey:@"Proj"]; // this is where the ap dies
        [tempProjectDictionaryArray setObject:projectList.desc forKey:@"Desc"];

        [projectDictionaryArray addObject:tempProjectDictionaryArray];
    }

其中 project.proj 由 projectList.proj 更改(也适用于 .desc)。

于 2013-10-05T09:09:53.227 回答
0

这意味着project.projnil

[tempProjectDictionaryArray setObject:project.proj forKey:@"Proj"];

AnNS(Mutable)Dictionary 不能存储nil为值,因此您应该检查例如

if (project.proj != nil) {
    [tempProjectDictionaryArray setObject:project.proj forKey:@"Proj"];
}

或者,您可以使用

tempProjectDictionaryArray = [project dictionaryWithValuesForKeys:@[@"Proj", @"Desc"]];

这几乎与

[tempProjectDictionaryArray setObject:project.proj forKey:@"Proj"];
[tempProjectDictionaryArray setObject:project.desc forKey:@"Desc"];

nil但将值替换为[NSNull null],因此您可以使用以下命令从字典中删除这些值

NSArray *keysForNullValues = [tempProjectDictionaryArray allKeysForObject:[NSNull null]];
[tempProjectDictionaryArray removeObjectsForKeys:keysForNullValues];
于 2013-10-05T09:08:13.827 回答