3 回答
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
我跟蹤由與之關(guān)聯(lián)的NSURLConnection鍵入的CFMutableDictionaryRef中的響應(yīng)。即:
connectionToInfoMapping =
CFDictionaryCreateMutable(
kCFAllocatorDefault,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
使用它而不是NSMutableDictionary可能看起來(lái)很奇怪,但我這樣做是因?yàn)檫@個(gè)CFDictionary只保留其鍵(NSURLConnection),而NSDictionary復(fù)制其鍵(并且NSURLConnection不支持復(fù)制)。
一旦完成:
CFDictionaryAddValue(
connectionToInfoMapping,
connection,
[NSMutableDictionary
dictionaryWithObject:[NSMutableData data]
forKey:@"receivedData"]);
現(xiàn)在我有一個(gè)“info”字典,用于每個(gè)連接,我可以用它來(lái)跟蹤有關(guān)連接的信息,“info”字典已經(jīng)包含一個(gè)可變數(shù)據(jù)對(duì)象,我可以用它來(lái)存儲(chǔ)答復(fù)數(shù)據(jù)。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSMutableDictionary *connectionInfo =
CFDictionaryGetValue(connectionToInfoMapping, connection);
[[connectionInfo objectForKey:@"receivedData"] appendData:data];
}
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
我有一個(gè)項(xiàng)目,我有兩個(gè)不同的NSURLConnections,并希望使用相同的委托。我所做的是在我的類中創(chuàng)建兩個(gè)屬性,每個(gè)連接一個(gè)。然后在委托方法中,我檢查它是否是哪個(gè)連接
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (connection == self.savingConnection) {
[self.savingReturnedData appendData:data];
}
else {
[self.sharingReturnedData appendData:data];
}
}
這也允許我在需要時(shí)按名稱取消特定連接。
TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
對(duì)NSURLConnection進(jìn)行子類化以保存數(shù)據(jù)是干凈的,代碼少于其他一些答案,更靈活,并且需要較少考慮參考管理。
// DataURLConnection.h
#import <Foundation/Foundation.h>
@interface DataURLConnection : NSURLConnection
@property(nonatomic, strong) NSMutableData *data;
@end
// DataURLConnection.m
#import "DataURLConnection.h"
@implementation DataURLConnection
@synthesize data;
@end
像使用NSURLConnection一樣使用它并在其data屬性中累積數(shù)據(jù):
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
((DataURLConnection *)connection).data = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[((DataURLConnection *)connection).data appendData:data];
}
而已。
如果你想更進(jìn)一步,可以添加一個(gè)塊作為回調(diào),只需幾行代碼:
// Add to DataURLConnection.h/.m
@property(nonatomic, copy) void (^onComplete)();
像這樣設(shè)置:
DataURLConnection *con = [[DataURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
con.onComplete = ^{
[self myMethod:con];
};
[con start];
并在加載完成時(shí)調(diào)用它,如下所示:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
((DataURLConnection *)connection).onComplete();
}
您可以擴(kuò)展塊以接受參數(shù),或者只將DataURLConnection作為參數(shù)傳遞給no-args塊中需要它的方法
- 3 回答
- 0 關(guān)注
- 487 瀏覽
添加回答
舉報(bào)
