Вот что вы делаете:
indexSelected = [NSString stringWithFormat: @"%d",[indexPath row] ];
SubscribersDetailViews2 *viewController = [[SubscribersDetailViews2 alloc] initWithNibName:@"SubscribersDetailViews2" bundle:nil];
[[MySingletonClass sharedMySingleton] doAnAuthenticatedAPIFetch_Subscriber_Detail:indexSelected delegate:self];
[[self navigationController] pushViewController:viewController animated:YES];
[viewController release];
Вы определяете протокол, которому соответствует ваш контроллер представления, и когда выборка и анализ данных выполняются, вы вызываете метод для делегата, чтобы позволить контроллеру представлениязнать, что данные готовы для отображения.
Если вам нужна дополнительная информация о том, как это сделать, оставьте комментарий.
РЕДАКТИРОВАТЬ: Так вот, как объявитьи использовать протокол.Я постараюсь сделать это как можно более простым.Я не уверен, что мне нравится ваше соглашение об именах, но я все равно буду использовать его для этого примера.
Итак, давайте перейдем к коду.Вот как вы объявляете протокол:
@protocol MySingletonClassDelegate <NSObject>
@optional
- (void)didDoAnAuthenticatedAPIFetch_Subscriber_Detail_WithData:(NSArray *)data;
- (void)failedToDoAnAuthenticatedAPIFetch_Subscriber_Detail_WithError:(NSError *)error;
@end
Опять же, я не слишком люблю соглашение об именах.Вы не должны иметь подчеркивания в именах методов target-c.
Протокол должен быть определен в MySingletonClass.h
до объявления MySingletonClass
.
Я объявил в протоколе два метода,один для доставки данных и один для доставки ошибки в случае сбоя, чтобы вы могли уведомить пользователя о сбое.
Чтобы использовать протокол, вам необходимо следующее:
@interface SubscribersDetailViews2 : UITableViewController <MySingletonClassDelegate>
Вам также нужно реализовать методы, объявленные в протоколе, но я оставлю эту реализацию вам.
Поскольку получение данных уже, кажется, происходит в фоновом режиме, я не думаю, что мне нужнообъяснить, как это сделать.Важно помнить, что вы хотите выполнять методы делегата в главном потоке.Вот код для этого:
- (void)doAnAuthenticatedAPIFetch_Subscriber_Detail:(NSUInteger)index delegate:id<MySingletonClassDelegate>delegate {
// Fetching data in background
if (successful) {
[self performSelectorOnMainThread:@selector(didDoAnAuthenticatedAPIFetch_Subscriber_Detail_WithData:) withObject:data waitUntilDone:NO];
} else {
[self performSelectorOnMainThread:@selector(failedToDoAnAuthenticatedAPIFetch_Subscriber_Detail_WithError:) withObject:error waitUntilDone:NO];
}
}
Просто чтобы прояснить, // Fetching data in background
должен быть заменен вашим кодом.Я предполагаю, что ваш код создает переменные (NSArray * data, NSError * error, BOOL успешно), которые я использую.
Вот и все, если вам нужно что-то пояснить, дайте мне знать.