0

我真的是 Cocoa 开发的新手,所以请善待。无论如何,我正在尝试反序列化我通过 TouchJSON 从服务器发送的 JSON 字符串,但我收到了'NSDictionary' may not respond to '+dictionaryWithJSONString:error:'.

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

这是失败的代码,我将不胜感激任何建议:

- (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

这就是预处理中显示的内容,文件和方法都在那里,所以它应该可以工作吗?

# 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;
4

2 回答 2

1

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

阅读前缀限制,您可能需要检查:

  * 每个目标使用一个且仅一个前缀标头。
  * 为使用预编译头文件的每个目标设置前缀头文件和预编译前缀头文件构建设置。
于 2011-01-28T03:30:15.740 回答
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

没有任何

您可以修补头文件并添加您正在使用的方法的声明:

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

直到开发人员解决这个问题。我刚刚通知了 TouchJSON 的维护者这个问题。

于 2011-01-28T06:57:01.027 回答