«NSDictionary» может не отвечать на «+ dictionaryWithJSONString» ... при использовании TouchJSON - PullRequest
0 голосов
/ 28 января 2011

Я действительно новичок в разработке Какао, так что будьте добры.В любом случае, я пытаюсь десериализовать строку JSON, которую я посылаю со своего сервера через TouchJSON, но я получаю предупреждение компилятора 'NSDictionary' may not respond to '+dictionaryWithJSONString:error:'.

Я понимаю, что говорит ошибка, но яУ меня есть все файлы TouchJSON в проекте, и у меня есть ссылка на NSDictionary_JSONExtensions.h в файле app _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;

Ответы [ 2 ]

1 голос
/ 28 января 2011

Проблема в том, что

+ (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 голос
/ 28 января 2011

Игнорировать смысл кода. Он всегда предлагает вещи, которые могут быть недоступны. Импорт NSDictionary_JSONExtensions.h в ваш .m должен исправить проблему. Вопрос в том, почему не исправлено, если оно на вашем .pch.

Считая ограничения , вы можете проверить это:

  * 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.
...