2011-01-28 43 views
0

当我真正的新Cocoa开发,所以请善待。无论如何,我尝试反序列化JSON字符串,我从我的服务器通过TouchJSON发送,但我得到的'NSDictionary' may not respond to '+dictionaryWithJSONString:error:'编译器警告。“的NSDictionary”可能不是“+ dictionaryWithJSONString”回应...使用TouchJSON

我明白错误在说什么,但我拥有项目中的所有TouchJSON文件,并且我在应用程序 _Prefix.pch文件中引用了NSDictionary_JSONExtensions.h。当我键入命令时,我确实看到它显示在代码意义上,那为什么它在编译器中失败?

这里就是它的失败的代码,我会很感激的任何建议:

- (IBAction)authorizeUser:(id)sender { 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.5/iOS"]]; 

[request setRequestMethod:@"POST"]; 
[request setPostValue:credentialsName.text forKey:@"Credentials.Name"]; 
[request setPostValue:credentialsPassword.text forKey:@"Credentials.Password"]; 
[request setPostValue:credentialsPIN.text forKey:@"Credentials.PIN"]; 
[request startSynchronous]; 

NSError *requestError = [request error]; 

if (!requestError) { 
    NSError *jsonError = NULL; 
    NSDictionary *responseDictionary = [NSDictionary dictionaryWithJSONString:[request responseString] error:&jsonError]; /* <- ERROR... */ 

    status.text = [responseDictionary objectForKey:@"Success"]; 
} 
} 

提前感谢!

UPDATE

#ifdef __OBJC__ 
    #import <Foundation/Foundation.h> 
    #import <UIKit/UIKit.h> 
    #import "ASIFormDataRequest.h" 
    #import "CJSONDeserializer.h" 
    #import "NSDictionary_JSONExtensions.h" 
#endif 

更新2

这是在预处理中显示的内容,并且这些文件是有作为的方法,所以它应该是工作?

# 10 "/Users/Alex/Documents/iPad/Classes/SignInViewController.m" 2 
# 1 "/Users/Alex/Documents/iPad/TouchJSON/Extensions/NSDictionary_JSONExtensions.h" 1 
# 32 "/Users/Alex/Documents/iPad/TouchJSON/Extensions/NSDictionary_JSONExtensions.h" 
@interface NSDictionary (NSDictionary_JSONExtensions) 

+ (id)dictionaryWithJSONData:(NSData *)inData error:(NSError **)outError; 
+0

发表您的前缀文件的内容。 – 2011-01-28 03:53:28

+0

@Bavarious,请看看我上面的更新。 – Gup3rSuR4c 2011-01-28 04:07:50

+0

@Alex每seppo0010建议,检查你的目标是否有“预编译前缀头”启用和“前缀头”是前缀文件的正确名称。另外,请尝试清理目标并重建它。无论如何,如果甚至#import实现文件中的头文件都不起作用,那么这是非常错误的。 – 2011-01-28 04:28:24

回答

1

的问题是,

+ (id)dictionaryWithJSONString:(NSString *)inJSON error:(NSError **)outError; 

在实现文件(NSDictionary_JSONExtensions.m)的定义,但尚未宣布在头文件(NSDictionary_JSONExtensions.h)中:

@interface NSDictionary (NSDictionary_JSONExtensions) 
+ (id)dictionaryWithJSONData:(NSData *)inData error:(NSError **)outError; 
@end 

none

可以修补的头文件,并添加你所使用的方法声明:

@interface NSDictionary (NSDictionary_JSONExtensions) 
+ (id)dictionaryWithJSONData:(NSData *)inData error:(NSError **)outError; 
+ (id)dictionaryWithJSONString:(NSString *)inJSON error:(NSError **)outError; 
@end 

,直至开发商解决这个问题。我刚刚警告TouchJSON的这个问题的维护者。

1

忽略代码意义。它总是建议可能无法使用的东西。 在.m上导入NSDictionary_JSONExtensions.h应该可以解决问题。问题是为什么如果它在你的.pch上并不是固定的。

prefix restrictions,你可能要检查这一点:

 
    * Use one and only one prefix header per target. 
    * Set the Prefix Header and Precompile Prefix Header build settings for every target that uses precompiled headers.