我最近开始为iOS平台编程,但现在我需要一些帮助来弄清楚如何执行“操作”:
现在,当用户启动同步操作时,我:
到现在为止还挺好。
现在针对我的(当前)问题->在接收到新数据(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];