深度可变的seralizing iOS词典数组

深度可变的seralizing iOS词典数组,第1张

概述一些jSON来自我的应用程序分解的本地文件:{“1”:{“name”:“我的列表”,“列表”:[]}}. 由于使用了以下选项,我使用这个iOS 5.1代码将整个事物转换为我认为是一个深度可变字典的内容: NSData *data = [[NSFileManager defaultManager] contentsAtPath:jSONFile];NSMutableDictionary *mydi 一些JsON来自我的应用程序分解的本地文件:{“1”:{“name”:“我的列表”,“列表”:[]}}.

由于使用了以下选项,我使用这个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,因为该函数很浅.任何方向/解决方案将不胜感激.谢谢.

解决方法 我已经使用了这个实现,它使用nsdictionary上的一个类别来做一个可变深度拷贝,效果很好:

deep mutable copy of a NSMutableDictionary

因此,在反序列化Json之后,您可以在其上调用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词典/数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1034769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存