2011-01-28 9 views
0

私は本当にココア開発を初めてやっています。とにかく、私は私のサーバーからTouchJSONを介して送信しているJSON文字列を逆シリアル化しようとしていますが、'NSDictionary' may not respond to '+dictionaryWithJSONString:error:'のコンパイラ警告が表示されます。TouchJSONを使用している場合、「NSDictionary」が「+ dictionaryWithJSONString」に応答しない可能性があります。

私はエラーが言っているが、私はプロジェクト内のすべての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 

UPDATE 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

プレフィックスファイルの内容を投稿します。 –

+0

@Bavarious、上記の私の更新を見てください。 – Gup3rSuR4c

+0

@Alex Per seppo0010提案では、ターゲットに「プリコンパイルプレフィックスヘッダー」が有効になっていて、「プレフィックスヘッダー」がプレフィックスファイルの正しい名前であるかどうかを確認してください。また、ターゲットを掃除して再構築してみてください。いずれにしても、実装ファイル内のヘッダファイルをインポートしても機能しない場合、何かが間違っています。 –

答えて

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のこの問題の保守担当者に警告しました。

+0

これは、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. 
+0

) PCHファイルとMファイルの両方で違いがありません。とにかくPCHファイルに入っていると、どうしてそれが失敗するのですか?(グローバル参照ファイルではありませんか?) – Gup3rSuR4c

関連する問題