我最近开始为iOS平台编程,但现在我需要一些帮助来弄清楚如何执行“操作”:

  • 对于我的应用程序,我获取一些JSON数据并将其作为对象放入数组
  • 此数组写入我自己的PLIST文件(在docs目录中)

  • 现在,当用户启动同步操作时,我:
  • 从PLIST
  • 中获取数据
  • 获取来自PLIST
  • 的数组中某个对象的时间戳
  • 在新的JSON请求中使用时间戳(用于新数据)

  • 到现在为止还挺好。

    现在针对我的(当前)问题->在接收到新数据(JSON请求)之后,我希望更新数组中此“某些”对象的时间戳(并将其写入Plist)。

    使用NSPredicate,我可以在主数组( stampArr )中找到正确的数据集。
    NSString *documentsDir = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
    NSString *plistPath = [documentsDir stringByAppendingPathComponent:@"stamps.plist"];
    
    NSMutableArray *stampArr = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
    
    NSPredicate *filter = [NSPredicate predicateWithFormat:@"eventid = 1"];
    NSMutableArray *filteredStampArr = [stampArr filteredArrayUsingPredicate:filter];
    

    但是现在,在更新filteredStampArr 之后,我想用过滤后的数组中的数据更新主数组。

    换句话说,我需要使用新的“时间戳”(对象字段)从Array更新对象。

    我当然可以在更改过滤后的数组后使用类似[stampArr addObject:[filteredStampArr copy]]的方法,但这只会创建信息的重复项。我希望覆盖原始对象。

    以某种方式(我认为),我需要一个“指针”来告诉我数据在原始数组中的位置,以便可以直接在主数组中更改数据?

    (我希望我的问题很清楚-如果不能,请这样说)

    最佳答案

    获取项目,在stampArr中找到它的索引,然后将其替换为newItem

    NSArray *filteredStampArr = [stampArr filteredArrayUsingPredicate:filter];
    id item = [filteredStampArr objectAtIndex:0]; // id because the type of the item is not known
    
    NSUInteger itemIndex = [stampArr indexOfObject:item];
    
    [stampArr replaceObjectAtIndex:itemIndex withObject:newItem];
    

    10-08 03:07