2010-05-17 8 views
0

내 애플 리케이션에서 나는 여러 plist를 다운로드해야합니다. 아이폰은 여러 파일을 다운로드

내가 다운로드가 내가 그것을 해제 경고에 단추를 추가 완료 한 후 UIActivityIndicator와 함께 UIAlertView를 사용하여 내 코드에서 NSURLconnection

을 사용하십시오 PLIST를 다운로드합니다.

plist를 다운로드하려면 plast가있는 주소로 NSURL을 설정하고 다음으로 url 캐시 정책과 시간 제한 간격을 사용하여 NSURLRequest을 설정합니다. 그럼 내 NSMutableDataNSURL 연결로 설정하고 NSURLRequest으로 설정합니다. 델리게이트 didReceiveData : 나는 데이터를 변경 가능한 데이터 객체에 추가합니다. didFailWithError:에 오류가 있습니다. 그리고 마지막으로 connectionDidFinishLoading에서 나는 내 plist 파일을 쓸 수 있도록 내 데이터를 plist에 serialize하고 내 alertview를 릴리스합니다.

내 문제는 : 내 NSURLConnection이 완료 될 때마다 connectionDidFinishLoading이 호출되기 때문에 다운로드 할 sevetal 파일이 있으면 어떻게해야합니까? 모든 것이 완료되면 내 UiAlert을 공개하고 싶습니다. 하지만 첫 번째 plist가 다운로드되면 connectionDidFinishLoading에있는 내 코드가 실행됩니다. 여기

내 코드입니다 : 뷰에서

한 부하 : 내가 요청을 연결을 배치해야합니까 어떻게 내가 didFinishLoading로 말할 수있는 다른 파일을 todownload 싶다면

// 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 

모든 파일을 다운로드하면 코드가 실행됩니다. 모든

+0

죄송

환호 도움이 될하지만 난 스마트 폰에있어 – Floo

답변

0

덕분에 당신은 당신이 다운로드하려는 자원의 배열을 반복하고, 이들 각각에 대한 요청을 할당 할 수 있습니다. connectionDidFinishLoading에서 평가할 수있는 연결 (예 : 배열의 URL 색인)에 태그를 설정할 수 있습니다. 요청이 전송되고 완료되면 모든 파일이로드되었는지 쉽게 확인할 수 있습니다.

+0

내가 더 이해하지 않는다 하지만 고맙겠습니다. 웹 검색을 할 수 있습니다. 예를 들어 미안하지만 저는 초보자입니다. – Floo

0

나는 답을 제공하지 않는 것이 좋다고 생각합니다. 나는 내가 프로그래밍에 익숙하지 않다는 것을 기억하기 때문에 당신이 그것을 얻지 못한다는 것을 이해합니다. (당신은 언젠가는 그렇게 할 것입니다.)

따라서 모든 다운로드가 완료되었는지 평가할 수있는 훨씬 간단한 옵션을 제공합니다. 구현에

당신은 단순히 당신이 당신의 .h 파일에 정의 카운터를 사용

int activeDownloads; 

(.모든 다운로드를 시작할 때마다 m) 파일, 당신은 다운로드가 완료하면 다운로드 당신이 activeDownloads의 수

++activeDownloads; 

을 높이기 시작하기 전에 다운로드 중

activeDownloads = 0; 

를 시작하기 전에 제로로 activeDownloads 설정 또는 같은 countervariable을 감소 실패

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

(내가 다운로드가 실패 할 경우 호출되는 방법을 작성하지 않은

...

또한 연결이 완료되거나 실패 할 때마다 완료되었거나 난간이 마지막인지 확인해야합니다. 당신은 단순히 activeDownloads이 0인지 확인하여이를 수행합니다. 이 경우 AlertView에 "닫기"버튼을 추가 할 수 있습니다.

이 솔루션의 단점은 연결 성공 및 실패를 추적 할 수 없다는 것입니다. (물론, 당신은, 그러나 activeDownloads가 당신을 도움이되지 않습니다)

희망 내가 코드를 인용하지

+0

고마워요. 이해해 봤지만 어떻게 다른 다운로드를 시작할 수 있을까요 ?? 왜냐하면 내가 다른 NSURLConnection을 추가하면 앱이 다운되기 때문이다. 다른 다운로드를 추가 하시려면 hiw를 모르세요. – Floo

관련 문제