Привести объект JSON (NSCFDictionary) к строке и проанализировать его - PullRequest
1 голос
/ 25 февраля 2011

Я работаю с Facebook Connect и пытаюсь обработать объект JSON, который я получаю. Я вызвал метод requstWithGraphPath и мне нужно вернуть объект JSON, попытался разобрать его и получил ошибку:

SBJSON *parser = [[SBJSON new] autorelease];
NSData *data = [[NSData alloc] initWithData:result];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; -> in this line - "[__NSCFDictionary length]: unrecognized selector sent to instance"
NSArray *events = [parser objectWithString:jsonString];

В чем проблема? Могу ли я получить строку другим способом или разобрать объект по-другому?

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Если вы работаете с обратным вызовом делегата

- (void)request:(FBRequest *)request didLoad:(id)result;

, работа по синтаксическому анализу была выполнена для вас.Перейдите NSDictionary или NSArray, чтобы найти данные, которые вы ищете.Если вы работаете с обратным вызовом делегата

- (void)request:(FBRequest *)request didLoadRawResponse:(NSData *)data;

, вы должны инициализировать строку NSString с данными и использовать метод категории, который SBJSON добавляет в NSString для создания идентификатора.Это предполагает, что данные - это данные, которые создают строку.

NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
id result = [jsonString JSONValue];
1 голос
/ 25 февраля 2011

Вы уверены, что ошибка происходит в этой строке или в строке выше?

Если result - это NSDictionary (или CFDictionary, то же самое), то он уже проанализирован, и вам не нужно делать это самостоятельно - и это может также вызвать это сообщение об ошибке, в строке выше .

Линия:

data = [[NSData alloc] initWithData:result];

почти наверняка не то, что вы хотите сделать, поскольку это эквивалентно

data = [result copy];

при условии, что result является NSData объектом (или NSMutableData), что, как я предполагаю, не является.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...