2015-01-13 3 views
-1

У меня есть следующий код, который работает. Он успешно отображает Myname в NSLog ...Objective C - Как вернуть локальную переменную в этот код?

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); 
    } 
}]; 

У меня есть следующий код для метода convertXMLURL, который находится в XMLConverter.m, который я импортируемый. Это хорошая работа по преобразованию моего 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

Что касается ответа ниже вы можете объявить словарь собственность либо в .h или .m файл, в зависимости от требований к видимости. – carlodurso

+0

благодарит Франческо! –

+0

Добро пожаловать! :) Если это помогло вам, не могли бы вы принять его? – fpg1503

ответ

3

Просто создайте @property и назначьте ему dictionary внутри вашего completion handler.

Например:

класса 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; 
    } 
}]; 

EDIT: Если обработчик завершения не находится внутри члена Foo класса dictionary свойство должно объявляется в файле заголовка (.h). В противном случае вы можете объявить его в файле реализации (.m).

Основываясь на комментарии по carlodurso

Смежные вопросы