我有一个应用程序要求用户列表的关注者。我希望能够改变我从twitter回来的数组内部的一些数据,但我似乎无法让它成为一个适当的可变副本。
这是我的代码:
NSMutableDictionary *theData = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
NSMutableDictionary *TWData = [[NSMutableDictionary alloc] init];
TWData = [theData mutableCopy];
NSMutableArray *data = [TWData objectForKey:@"users"];
这个顺序和执行可变副本FIRST是我尝试过的最后一件事。这是抛出错误的代码:
[[data objectAtIndex:2] setObject:@"indeed" forKey:@"following"];
以下是典型的错误消息:
[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
我明白为什么它会给我错误,我的问题是如何将所有内容(所有子词典和数组,以及所有子词典和数组等)变为可变,以便我可以更改数据。
任何帮助都很棒,谢谢!
答案 0 :(得分:1)
您可以使用Core Foundation中的CFPropertyListCreateDeepCopy
:
NSMutableDictionary* mutableData = (NSMutableDictionary*) CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef) theData, kCFPropertyListMutableContainers));
有关详细信息,请参阅CFPropertyList reference。特别是,Property List Mutability Options可用于控制返回副本中的可变内容。