我有以下代码可行。它成功地在NSLog中显示myName ...
NSURL *apiString = [NSURL URLWithString:@"http://testapi.com/url"];
[XMLConverter convertXMLURL:apiString completion:^(BOOL success, NSDictionary *dictionary, NSError *error)
{
if (success)
{
NSString *myName = dictionary[@"profile"][@"real_name"];
NSLog(@"%@ is my name", myName);
}
}];
对于我导入的XMLConverter.m中的方法convertXMLURL,我有以下代码。它将我的XML转换为NSDictionary做得很好。这就是我想要的......
+ (void)convertXMLURL:(NSURL *)url completion:(OutputBlock)completion
{
///Wrapper for -initWithContentsOfURL: method of NSXMLParser
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[[XMLConverter new] parser:parser completion:completion];
});
}
我遇到的问题是*字典是一个局部变量。我需要在代码中的其他地方使用它。我怎么能归还呢?
答案 0 :(得分:3)
只需创建一个@property
并在dictionary
内为其分配completion handler
。
例如:
@interface Foo : NSObject
@property (strong, nonatomic) NSDictionary* dictionary;
@end
NSURL *apiString = [NSURL URLWithString:@"http://testapi.com/url"];
[XMLConverter convertXMLURL:apiString completion:^(BOOL success, NSDictionary *dictionary, NSError *error)
{
if (success)
{
NSString *myName = dictionary[@"profile"][@"real_name"];
NSLog(@"%@ is my name", myName);
myInstanceOfFoo.dictionary = dictionary;
}
}];
编辑:如果完成处理程序不在Foo
类的成员中,则必须在头文件(dictionary
)中声明.h
属性。否则,您可以在实现文件(.m
)中声明它。