【发布时间】:2011-01-28 03:15:02
【问题描述】:
我真的是 Cocoa 开发的新手,所以请善待。无论如何,我正在尝试反序列化我通过 TouchJSON 从服务器发送的 JSON 字符串,但我收到了 'NSDictionary' may not respond to '+dictionaryWithJSONString:error:' 的编译器警告。
我明白错误在说什么,但我在项目中有所有 TouchJSON 文件,并且我在 app_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"];
}
}
提前致谢!
更新
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "ASIFormDataRequest.h"
#import "CJSONDeserializer.h"
#import "NSDictionary_JSONExtensions.h"
#endif
更新 2
这是 Preprocess 中显示的内容,文件和方法都在那里,所以它应该可以工作?
# 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;
【问题讨论】:
-
发布您的前缀文件内容。
-
@Bavarious,请看我上面的更新。
-
@Alex 根据 seppo0010 的建议,检查您的目标是否启用了“预编译前缀标头”并且“前缀标头”是您的前缀文件的正确名称。此外,尝试清理目标并重建它。无论如何,如果在你的实现文件中 #importing 头文件也不起作用,那就大错特错了。
-
@Bavarious,我检查了设置并没有启用它,所以我继续启用它并将“前缀标题”设置为 PCH 文件。可悲的是它仍然没有效果,这意味着有一些非常错误的,正如你所说。现在,我使用 XCode 的经验大约不到 10 小时,将 TouchJSON(和 ASIHttpRequest)文件放在“其他来源”目录中是否正确?是否有编译版本(来自.NET,我习惯于 DLL...)?
-
'Other Sources' 只是一个逻辑组,所以没关系。编译后的版本通常捆绑为框架包,但有时它们可以作为独立的静态或动态库使用。不确定 TouchJSON 是否提供它们。