2015-02-10 8 views
0

У меня есть несколько ViewControllers и подкласс «networkClient» NSObject, который предлагает функции получения/отправки данных.Как вернуть функцию в объекте-C

Если «networkClient» возникает ошибка при получении/отправке данных, функции возвращают информацию об ошибках для ViewControllers, которые вызывают функции get/post.

я обнаружил, что всегда есть много того же кода в разных ViewControllers, такие как:

- (void)showAlertWithString:(NSString *)string{ 
    SIAlertView *alertView = [[SIAlertView alloc]initWithTitle:@"Error" andMessage:string]; 
    [alertView addButtonWithTitle:@"OK" 
    type:SIAlertViewButtonTypeDestructive handler:^(SIAlertView *alertView){ 
    }]; 
    [alertView show]; 
} 

, так как я не хочу, чтобы включить 3-ю библиотеку партии «SIAlertView» и писать код - (пустота) showAlertViewWithString в каждом ViewControllers.

Мне интересно, есть ли способ включить библиотеку и написать код только в «networkClient» и вернуть это - (void) showAlertViewWithString в ViewControllers и позволить им выполнить его в ViewControllers, когда произошла ошибка?


обновление: спасибо за ответы, так как я новичок развития IOS я просто знаю, что есть метод, называемый «блок» и после того, как я пытался, казалось, работу.

Ниже приведен код, который я попытался использовать блоком вместо делегирования, чтобы вызвать «show alert» в ViewControllers.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
NSDictionary *parameters = @{@"action" : @"create_user", 
          @"email" : email, 
          @"password" :password, 
          @"user_name" :name, 
          @"mobile": number 
          }; 
[manager POST:kLoginURL 
    parameters:parameters 
     success:^(AFHTTPRequestOperation *operation, id responseObject) { 
      SIAlertView *alertView = [[SIAlertView alloc]initWithTitle:@"Alert" andMessage:@"Success"]; 
      [alertView addButtonWithTitle:@"ok" type:SIAlertViewButtonTypeDestructive handler:^(SIAlertView *alertView){ 

      }]; 
      [alertView show]; 
     } 
//    [self.delegate createAccountResult:(responseObject)]; 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }]; 
} 
+0

Попробуйте подклассифицировать UIViewController своим сетевым клиентом, чтобы вы могли обрабатывать блоки успеха/ошибки. –

+0

Я прочитал несколько статей об использовании блока, я обнаружил, что могу просто написать функцию, которую я хочу выполнить в блоке, и она будет выполняться в ViewControllers, которые вызывают метод «networkClient». –

ответ

1

Так создать пользовательский подкласс UIViewController, и реализовать этот метод в классе. Затем сделайте все свои контроллеры вида наследуемыми от своего пользовательского класса.

В качестве альтернативы вы можете создать категорию UIViewController.

+0

есть ~! это хорошая идея, которую я использовал для этого, это очень полезно, когда несколько ViewControllers используют одни и те же функции. Я также слышал о «блоке», возможно, это лучший выбор, когда я уже создал ViewControllers ....> _ <.... Мне нужно узнать, как использовать блок ... –

+0

Блоки очень полезны, но Я не знаю, как они будут применяться здесь. –

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