2011-03-02 136 views
3

我在尝试在模拟器上运行应用程序时出现错误。 我抄JSON(JSON Framework)的项目在我的应用程序,但我的模拟器崩溃时它编译下面的线,(我使用的是iOS 4.2)iPhone应用程序出现JSON错误

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSString *jsonString = [NSString stringWithString:@"{\"foo\": \"bar\"}"]; 
    NSDictionary *dictionary = [jsonString JSONValue]; 
    NSLog(@"Dictionary value for \"foo\" is \"%@\"", [dictionary objectForKey:@"foo"]); 
} 

错误:

2011-03-02 13:33:37.304 test[10918:207] -[NSCFString JSONValue]: unrecognized selector sent to instance 0x3034 
2011-03-02 13:33:37.308 test[10918:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString JSONValue]: unrecognized selector sent to instance 0x3034' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00da7be9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00efc5c2 objc_exception_throw + 47 
    2 CoreFoundation      0x00da96fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00d19366 ___forwarding___ + 966 
    4 CoreFoundation      0x00d18f22 _CF_forwarding_prep_0 + 50 
    5 test        0x000025d7 -[testViewController viewDidLoad] + 119 
    6 UIKit        0x0035e65e -[UIViewController view] + 179 
    7 test        0x0000237e -[testAppDelegate application:didFinishLaunchingWithOptions:] + 79 
    8 UIKit        0x002b11fa -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163 
    9 UIKit        0x002b355e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439 
    10 UIKit        0x002bddb2 -[UIApplication handleEvent:withNewEvent:] + 1533 
    11 UIKit        0x002b6202 -[UIApplication sendEvent:] + 71 
    12 UIKit        0x002bb732 _UIApplicationHandleEvent + 7576 
    13 GraphicsServices     0x016dda36 PurpleEventCallback + 1550 
    14 CoreFoundation      0x00d89064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    15 CoreFoundation      0x00ce96f7 __CFRunLoopDoSource1 + 215 
    16 CoreFoundation      0x00ce6983 __CFRunLoopRun + 979 
    17 CoreFoundation      0x00ce6240 CFRunLoopRunSpecific + 208 
    18 CoreFoundation      0x00ce6161 CFRunLoopRunInMode + 97 
    19 UIKit        0x002b2fa8 -[UIApplication _run] + 636 
    20 UIKit        0x002bf42e UIApplicationMain + 1160 
    21 test        0x0000230c main + 102 
    22 test        0x0000229d start + 53 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: “SIGABRT”. 
(gdb) 
+0

您正在使用哪种JSON框架?你是否在需要它的类中导入它?你试图发送'JSONValue'到'NSString',它没有这样的方法,但我认为这个框架可以利用类别来加强这个功能。 – 2011-03-02 20:39:41

+0

我已经从网上下载了JsoniPhoneSDK.dmg文件。我按照其中一个教程的建议在我的项目中添加了JSON文件夹。将JSON.h文件包含在我的appController.m文件中。我使用下面的教程来安装JSON http://mobileorchard.com/tutorial-json-over-http-on-the-iphone/ – developer 2011-03-02 20:48:10

+0

您是否勾选了将源文件添加到项目中时复制源文件的复选框?如果没有,并且您删除了原始磁盘映像,则可能是您的问题。 – 2011-03-02 21:12:57

回答

10

尝试增加-ObjC -all_load设置为OTHER_LINKER_FLAGS设置。如果这不是一个选项,您可以尝试直接使用SBJsonParser或SBJsonWriter对象,而不是类别方法。

+0

OTHER_LINKER_FLAGS选项不起作用。我会尝试看看另一个是否工作.. – developer 2011-03-09 17:23:13

+2

为我工作,谢谢:) – 2012-04-13 13:23:09

+0

@developer,你需要添加*两个*设置。 – 2012-04-26 10:07:27

0

添加-ObjC -all_load到App靶>构建设置 - >链接 - >其他链接标志 - >调试工作中的XCode 4

此前据崩溃

9

确保SBJSON文件正在编译! 目标 - >构建阶段 - >编译文件< - 检查SBJSON的* .m文件是否存在!