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

問題はそれです

+ (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 に答える
1

コードセンスを無視します。それは常に利用できないかもしれないものを提案します。NSDictionary_JSONExtensions.h.mにインポートすると、問題が解決するはずです。問題は、それが.pchにある場合、なぜ修正されないのかということです。

プレフィックスの制限を読んで、これを確認することをお勧めします。

  *ターゲットごとに1つだけのプレフィックスヘッダーを使用します。
  *プリコンパイル済みヘッダーを使用するすべてのターゲットに対して、プリフィックスヘッダーとプリコンパイルプリフィックスヘッダーのビルド設定を設定します。
于 2011-01-28T03:30:15.740 に答える