userDefaults和比较数组

时间:2018-03-26 11:48:39

标签: ios objective-c

我在保存和比较数据方面遇到了问题。首先,我下载数据并将我的数据(数组,字典)保存到userDefaults。重新下载后,我需要比较我的新数组是否有一些我没有保存在userDefaults中的新数据。所以它的意思是我应该在我的旧数据中找到不一样的数据并将它们添加到我的新数组中。

    NSMutableDictionary* tmpDict = [NSMutableDictionary new];
    NSMutableDictionary* copyDict = [NSMutableDictionary new];


    NSMutableArray *dataGroupsArr = [NSMutableArray new];


    NSMutableDictionary *dataGroupsDict = [NSMutableDictionary new];
    dataGroupsDict[@"name"] = @"FirstGroup"; // I dont need groups at the moment

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

FOR ........(解析器)

 {            
 NSMutableDictionary *data = [[NSMutableDictionary alloc]init];

 data[@"dataID"] = [@"some data from parser"];

 [datas addObject:data];
 }];

    dataGroupsDict[@"datas"] = datas;
   [dataGroupsArr addObject:dataGroupsDict];
   tmpDict[@"dataGroups"] = dataGroupsArr;

保存数据后我试图从userdefualts加载它们

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    copyDict = [userDefaults objectForKey:@"dataDownloadArr"];

    //data never added
    if(copyDict == nil){
        [userDefaults setObject:tmpDict forKey:@"dataDownloadArr"];
        [userDefaults synchronize];
    } else {

        for (int i = 0; i< [copyDict[@"dataGroups"][0][@"datas"]count]; i++){
            NSLog(@"%@", copyDict[@"dataGroups"][0][@"datas"][i][@"dataID"]);

        }

    }

现在我不知道如何比较数据,如果新数组中有新数据,如何将其添加到旧数据中。

2 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题我做的是我要求后端开发人员发送一个值为modified_date并创建一个包含dataArray和modified_date的字典。因此,重新下载后,您只需检查modified_date并替换dataArray,而不是比较每个数组元素。

答案 1 :(得分:0)

您是否尝试使用NSData实例方法isEqualToData?

  

如果两个数据对象保持相同的字节数,则它们是相等的   如果对象中相同位置的字节相同。

https://developer.apple.com/documentation/foundation/nsdata/1409330-isequaltodata