我想我應該使用選擇器(甚至是不同的範例),但即使在TF'RM之後,我無法弄清楚我應該做什麼。這一切都與回調從委託使用選擇器進行回調?
我有我的主要模型對象:
@implementation Model
@synthesize myConnection; // which is an NSURLConnection
...
-(void)someMethod{
MyConnectionDelegate *mcd = [[MyConnectionDelegate alloc]initWithCallingObject:self];
myConnection = [[NSURLConnection alloc] initWithRequest:requestForToken delegate:mcd];
...
}
-(void)didGetCalledBack:(NSArray *)resultArray{
NSLog(@"got the callback");
}
,然後在我的委託:
@implementation MyConnectionDelegate
@synthesize callingObject; // which is of type id
@synthesize resultArray; // NSArray
-(id)initWithCallingObject:(id)caller{
...//std [self init] block
self.callingObject = caller;
return self;
...
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
...
}
//and all the other NSURLConnection delegate methods
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
...
// finish building array of results into self.resultArray
[self.callingObject didGetCalledBack:self.resultArray];
}
所以...... 1)我覺得我應該使用選擇器,還是其他的東西,而不是硬編碼調用者(委託人?)需要實現的事實 - didGetCalledBack
: 對不對?如果是這樣,怎麼樣? (以及爲什麼,除了清潔)
2)或者是我的整個實現錯誤的方式我試圖使用NSURLConnection
代表回撥給委託人的回調錯誤?
我已經看過蘋果示例代碼等,但沒有看到有什麼比delegate:self
以外的任何東西。也許我應該有委託:NSURLConnection
也是我自己,但我做了很多連接,如果我做委託:自我我的委託方法(如 - didReceiveData
:)變成if (connection ==connection1){
類型代碼的大混亂。
感謝, 理查德
我認爲從Model建立連接,但是在其他地方實現委託會不必要地將相關代碼在不同的類中傳播,這使得難以維護並難以理解。 如果你有很多代表,那麼你的模型可能做的太多了,即屬於其他地方的東西*完全*。 – Eiko 2010-07-02 00:15:36
我根本不反對,但如果我不在其他地方使用委託,那麼我的5-6 REST調用每個返回的XML都會以我的6個NSXMLParser委託方法和5-6個NSURLConnection委託方法中的大if/elseif語句結束。這就是我想要清理的東西。你對「完全在別的地方」有什麼特別的想法嗎? – richard 2010-07-02 17:07:03
爲什麼它必須以大if/elseif塊結束?你不能抽象嗎?就像你現在所擁有的那樣,你只是將這種複雜性移到其他地方。 – 2010-07-03 16:21:10