У меня есть несколько 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);
}];
}
Попробуйте подклассифицировать UIViewController своим сетевым клиентом, чтобы вы могли обрабатывать блоки успеха/ошибки. –
Я прочитал несколько статей об использовании блока, я обнаружил, что могу просто написать функцию, которую я хочу выполнить в блоке, и она будет выполняться в ViewControllers, которые вызывают метод «networkClient». –