2010-05-17 97 views
0

在我的應用程序中,我需要下載幾個plist。iphone下載幾個文件

下載plist中我使用NSURLconnection

在我的代碼我使用的UIAlertViewUIActivityIndicator那麼當下載完成後我添加一個按鈕,報警將其關閉。

要下載plist我用我的代碼中的某個地方NSURL設置爲plist的地址,接下來我設置一個NSURLRequest URL緩存策略和超時間隔。 然後我將我的NSMutableData設置爲NSURLNSURLRequest的連接。 在委託didReceiveData:我追加數據到我的可變數據對象,在didFailWithError:我處理錯誤。並最終在connectionDidFinishLoading我序列化我的數據到plist,所以我可以寫入文件我的plist,並釋放我的alertview。

我的問題是:如果我有要下載的文件,我會怎麼辦?因爲每次我的NSURLConnection完成時都會調用connectionDidFinishLoading,但是我想在完成所有工作時發佈我的UiAlert。但是當第一個plist被下載時,我的代碼在connectionDidFinishLoading將會觸發。

這裏是我的代碼:

視圖

做負載:

// set the UiAlert in the view did load  
NSURL *theUrl = [NSURL URLWithString:@"http://adress.com/plist/myPlist.plist"]; 
NSURLRequest *theRequest = [NSURLRequest requestWithURL:theUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
self.plistConnection = [[ NSURLConnection alloc] initwithRequest:theRequest delegate:self startImmediatly:YES]; 
//plistConnection is a NSURLConnection 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
[incomingPListData appendData:data]; 
} 

-(void)connection:(NSURLConnection *)connectionDidFailWithError:(NSError *)error { 

// handle error here  
} 

-(void)connectionDidFinisloading:(NSURLConnection *) connection {  
NSPropertyListFormat format; 
NSString *serialErrorString;  

NSData *plist = [NSPropertyListSerialisation propertyListFromData:incomingPlistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&serialErrorString]; 

if (serialErrorString) {//error} 
else { // create path and write plist to path} 
// change message and title of the alert 

所以,如果我想todownload的另一個文件我在哪裏可以把請求的連接,我怎麼能告訴didFinishLoading到當我的所有文件被下載時,都會顯示防火碼

感謝所有

+0

遺憾沒有引用代碼,但我在智能手機上 – Floo 2010-05-17 14:11:47

回答

0

可以遍歷要下載資源的數組,並分配每個人的請求。可以將標記設置爲連接(例如,數組中的URL的索引),您可以在connectionDidFinishLoading中對其進行評估。如果您持有這些信息,哪些請求已發送,哪些已完成,您可以輕鬆查看是否已加載所有文件。

+0

我也沒有明白但謝謝你,我會搜索網絡 可能是你可以給我一個例子對不起,但我是一個新手 – Floo 2010-05-17 15:22:10

0

我認爲未設置提供了一個很好的答案。我知道你不明白(你將會有一天),因爲我記得自己剛剛接觸編程等。

因此,我提供了另一個更簡單的選項來評估是否所有下載都完成了。

您只需使用您在.h文件中定義了一個計數器,

int activeDownloads; 

在您的實現(。米)的文件,只要你啓動所有下載內容,然後再開始下載您增加activeDownloads的

++activeDownloads; 

數量,如果下載完成任何你下載的開始

activeDownloads = 0; 

之前設置activeDownloads爲零或失敗,你減少同一countervariable

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { --activeDownloads;} 

(我沒有寫下來,如果下載失敗時調用的方法...

同樣,每次連接完成或失敗時,您都必須檢查已完成或已完成的連接是否是最後一個連接。 你可以通過簡單地檢查activeDownloads是否等於零來做到這一點。如果是這種情況,可以將「關閉」按鈕添加到AlertView。

該解決方案的缺點是,您無法跟蹤哪個連接成功,哪個連接失敗。 (當然,你是,但activeDownloads不幫你)

希望我能幫助

歡呼

+0

好的,謝謝我明白,但我怎麼能開始另一個下載?因爲如果我添加另一個NSURLConnection該應用程序崩潰。 我不明白hiw添加另一個下載 – Floo 2010-05-17 16:34:12