這是你做什麼:
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
再次,我不喜歡的命名約定。在Objective-C方法名稱中不應該有下劃線。
在MySingletonClass
的聲明之前,協議應該在MySingletonClass.h
中定義。
我在協議中聲明瞭兩個方法,一個用於傳遞數據,另一個用於在失敗時傳遞錯誤,以便通知用戶它失敗了。
要使用你需要以下協議:
@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成功)。
就是這樣,如果你需要澄清任何事情讓我知道。
嗨,埃裏克感謝您的早期答覆可以plz指導我如何申報和使用協議。 – 2011-03-16 10:03:42
我當然可以。我會盡快找到時間。希望那會很快。 – 2011-03-16 10:10:11
您是否在'MySingletonClass'中將'doAnAuthenticatedAPIFetch_Subscriber_Detail:'更改爲'doAnAuthenticatedAPIFetch_Subscriber_Detail:delegate:'? – 2011-03-17 10:02:13