Objective C - 如何在此代码中返回局部变量?

时间:2015-01-13 02:08:19

标签: ios objective-c xcode methods local-variables

我有以下代码可行。它成功地在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];
});
}

我遇到的问题是*字典是一个局部变量。我需要在代码中的其他地方使用它。我怎么能归还呢?

1 个答案:

答案 0 :(得分:3)

只需创建一个@property并在dictionary内为其分配completion handler

例如:

Class Foo

@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)中声明它。

基于carlodurso

的评论