我已经使用JSONKit库来解析字典并获取JSON
字符串。普通设备(iOS7)一切都很好。但是,当我在iOS 7-64位模拟器中运行应用程序时,它在以下方法下崩溃了:
- (NSString *)JSONString;
崩溃消息显示在这行JSONKit.m
课上
试图找出它,但无法整理。
最后,我完成了本机的NSJSONSerialization类。
有没有人解决这个问题?
据我所知,有多个补丁版本试图解决您在此处提到的64位崩溃问题,例如heroims的JSONKit 64位崩溃修复。
他们都试图修复麻烦的行以获取标记的指针,“ Objective-C对象的指针“指向”的第一件事就是该对象类的指针”:
*((void **)objectPtr)
我写了一个简单的代码来模拟崩溃,
NSDictionary *dic = @{@"hi":@(4)};
void *keys[2], *objects[2];
CFDictionaryGetKeysAndValues((CFDictionaryRef)dic, (const void **)keys, (const void **)objects);
void *objectPtr = objects[0];
void *another = *((void **)objectPtr);//Only works for 32 bit machine
NSLog(@"%@",[another description]);
我的猜测是,对于64位编译器,Apple更改了NSNumber的标记指针实现,这导致崩溃。在此处检查有关标记指针的讨论stackoverflow.com/questions/5819387/why-is-nsnumber-immutable
如果我更改NSDictionary *dic = @{@"hi":@(4)};
为NSDictionary *dic = @{@"hi":@"hello"};
它,则不会崩溃。
我在这里提到的补丁仅使用了object_getClass,这似乎违背了最初的目的:“为什么不仅仅使用object_getClass()
?...”(上面的注释)
因此,就像您现在所说的,我最终也使用了NSJSONSerialization类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句