我使用JSONKit库来解析字典并获取JSON
字符串。对于普通设备(iOS7),一切都很好。但是当我在iOS 7-64位模拟器中运行应用程序时,它在以下方法中崩溃了:
- (NSString *)JSONString;
崩溃消息显示在JSONKit.m
类
试图找出它但却无法理清。
我最终得到了我们的本地NSJSONSerialization课程。
有没有人解决这个问题?
答案 0 :(得分:4)
据我所知,有多个补丁版本试图修复你在这里提到的64位崩溃问题,例如: JSONKit 64bit crash fix by heroims
他们都试图修复那些麻烦的线来获取标记指针,"指向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类。
答案 1 :(得分:2)
JSONKit here的修补版本修复了64位问题。