【问题标题】:Objective-C XML ParsingObjective-C XML 解析
【发布时间】:2010-08-12 16:18:19
【问题描述】:

我正在使用这段代码来解析实例变量response中的XML:

@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

提前致谢:)

【问题讨论】:

    标签: objective-c xml parsing


    【解决方案1】:

    您似乎错误地实现了委托方法。根据MKAbeFook documentation,签名应该是:

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

    如果您指定了 JSON 响应类型,responseNSArrayNSDictionary。由于您似乎收到了NSXMLDocument,因此它必须默认为 XML 响应类型。 XML 已经解析并转换为 DOM,因此您无需解析它。只需投下回复并与NSXML tree-based API 一起工作。

    NSXMLDocument *document = (NSXMLDocument *)response;
    NSArray *someChildren = [document nodesForXPath:@"//foo" error:NULL];
    ...
    

    【讨论】:

      【解决方案2】:

      两个想法:

      1. 不需要alloc/init一个新的数据对象。你可以简单地做: NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:response] autorelease];
      2. objc_exception_throw 上设置断点并找出异常(无法识别的选择器)的来源。

      【讨论】:

      • 它说它来自 [parser parse];有什么想法吗?
      【解决方案3】:

      您的问题是 xmlData 未正确初始化(我认为):

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

      由于某种原因,您将 response 转换为 id。 initWithData 期望传递一个 NSData 对象,因此您应该将 response 转换为 NSData(目前是一个 NSString),如下所示:

      NSData *xmlData = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding];
      

      【讨论】:

      • 你用 Gdb 完成了吗?我不认为上面的代码是你的问题,你有行号,所以你确定?
      • 'Variable is not a CFString',知道这意味着什么吗? skitch.com/james-eggers/dt3yk/error
      • 也许调用该方法的东西是发送一个 CFString 而不是一个 NSString?在上面发布更多代码,返回几步。
      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多