大佬教程收集整理的这篇文章主要介绍了深度可变的seralizing iOS词典/数组,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
由于使用了以下选项,我使用这个iOS 5.1代码将整个事物转换为我认为是一个深度可变字典的内容:
NSData *data = [[NSFileManager defaultManager] contentsAtPath:jSONFile]; NSMutableDictionary *myDict = [NSJSONserialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
给定选项NSJSONReadingMutableContainers我会假设子数组列表将属于这个类别:“NSJSONReadingMutableContainers – 指定数组和字典被创建为可变对象.”从NSJSONSerialization Class Reference开始,但是当我尝试执行以下代码时:
NSMutableArray *myarray = [myDict objectForKey:@"1"] objectForKey:@"list"]; [myarray addObject:@"test"];
执行在第二行(addObject)上爆炸,但有以下例外:
– [__ NSArrayI addObject:]:无法识别的选择器发送到实例0x887e840
**由于未捕获的异常’NSInvalidArgumentexception’终止应用程序,原因:’ – [__ NSArrayI addObject:]:无法识别的选择器发送到实例0x887e840′
根据我的SO研究(1,2,3),似乎上述错误通常是在尝试添加对象的元素(字典/数组)不可变时引起的.此外,从我的SO研究(1,2),似乎没有办法测试对象在Obj-C中是否确实是可变的,这是设计的.
所以我想我的问题是,如何确保我的jSON结构在序列化之后(或之后)确实是“深度”可变的?我知道我不能在myDict上使用mutableCopy,因为该函数很浅.任何方向/解决方案将不胜感激.谢谢.
deep mutable copy of a NSMutableDictionary
因此,在反序列化json之后,您可以在其上@L_592_20@mutableDeepCopy.
这就是我所拥有的:
@interface NSDictionary(Category) - (NSMutableDictionary *)mutableDeepCopy; @end @implementation NSDictionary(Category) - (NSMutableDictionary *)mutableDeepCopy{ NSMutableDictionary * ret = [[NSMutableDictionary alloc] initWithCapacity:[self count]]; NSMutableArray * array; for (NSString* key in [self allKeys]){ if([[self objectForKey:key] respondsToSELEctor:@SELEctor(mutableCopyWithZone:)]){ array = [(NSArray *)[self objectForKey:key] mutableCopy]; [ret SETVALue:array forKey:key]; } else{ [ret SETVALue:[self objectForKey:key] forKey:key]; } } return ret; } @end
以上是大佬教程为你收集整理的深度可变的seralizing iOS词典/数组全部内容,希望文章能够帮你解决深度可变的seralizing iOS词典/数组所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。