Синтаксический анализ Objective-C XML - PullRequest
1 голос
/ 12 августа 2010

Я использую этот код для анализа XML в переменной экземпляра response:

@implementation Delegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
MKFacebook *fbConnection = [[MKFacebook facebookWithAPIKey:@"----" delegate:self] retain];
[fbConnection login];

NSMutableDictionary *parameters = [[[NSMutableDictionary alloc] init] autorelease];
MKFacebookRequest *request = [MKFacebookRequest requestWithDelegate:self];

//set up parameters for request
[parameters setValue:[NSArray arrayWithObjects:[fbConnection uid], @"123456789", nil] forKey:@"uids"];
[parameters setValue:[NSArray arrayWithObjects:@"first_name",@"last_name",nil] forKey:@"fields"];

//send the request
[request sendRequest:@"users.getInfo" withParameters:parameters];
}


-(void)userLoginSuccessful
{
NSLog(@"neat");
}


- (void)facebookRequest:(MKFacebookRequest *)request responseReceived:(NSString *)response
{
CFStringRef response = (CFStringRef)response;
NSData *xmlData = [[NSData alloc] initWithData:[response2 dataUsingEncoding:NSUTF8StringEncoding]];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
[parser setDelegate:self];
[parser parse];     
}

Но я получаю эту консольную ошибку при выполнении кода:

2010-08-12 20:24:46.924 App[2966:a0f] -[NSXMLDocument dataUsingEncoding:]: unrecognized selector sent to instance 0x47c250

Заранее спасибо:)

Ответы [ 3 ]

1 голос
/ 13 августа 2010

Кажется, вы неправильно внедрили метод делегата.Согласно документации MKAbeFook подпись должна быть:

- (void)facebookRequest:(MKFacebookRequest *)request responseReceived:(id)response

, где response - это NSArray или NSDictionary, если вы указали тип ответа JSON.Поскольку вы, похоже, получаете NSXMLDocument, по умолчанию это тип ответа XML.XML уже проанализирован и передан в DOM, поэтому вам не нужно его анализировать.Просто приведите ответ и приступайте к работе с NSXML-интерфейсом на основе дерева .

NSXMLDocument *document = (NSXMLDocument *)response;
NSArray *someChildren = [document nodesForXPath:@"//foo" error:NULL];
...
0 голосов
/ 12 августа 2010

Ваша проблема в том, что xmlData не инициализируется должным образом (я думаю):

NSData *xmlData = [[NSData alloc] initWithData:(id)response];

По какой-то причине вы используете response как идентификатор. initWithData ожидает, что будет передан объект NSData, поэтому вы должны преобразовать response в NSData (которая в настоящее время является строкой NSSt) с чем-то вроде:

NSData *xmlData = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding];
0 голосов
/ 12 августа 2010

Две мысли:

  1. Нет необходимости alloc / init новый объект данных. Вы можете просто сделать: NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:response] autorelease];
  2. Установите точку останова на objc_exception_throw и выясните, откуда происходит это исключение (нераспознанный селектор).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...