2012-10-02 3 views
0

먼저, 나는 객관적인 -c와 ios 개발에 대해 상당히 새로운 것을 알게되었습니다.다운로드 한 plist에서 UITableView 데이터를 다시로드

인터넷에서 다운로드 된 .plist가 있으며 UITableView를 채우는 데 사용됩니다. 이 AppDelegate ApplicationDidLaunch 메서드를 사용하는 동안 작동하도록 얻을 수 있습니다.

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"]; 
NSURL *theFileURL = [NSURL URLWithString:@"http://dl.dropbox.com/u/8068058/Data.plist"]; 
NSDictionary *replace = [[NSDictionary alloc] initWithContentsOfURL:theFileURL]; 
if (replace != nil){ 
    [replace writeToFile:finalPath atomically:YES]; 
} 

그때 그때 내가있는 TableView를 채우고를 표시, 모든 괜찮 데이터 경로

NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *DataPath = [Path stringByAppendingPathComponent:@"Data.plist"]; 

NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath]; 
self.data = tempDict; 
[tempDict release]; 

로 설정합니다. 테이블을 표시하는 NavgationController에 '새로 고침'버튼을 추가하면 내가 이것을 누르고 동일한 다운로드 코드를 실행하면

[self.tableView reloadData]; 

나는 아무 것도 얻지 못합니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?

+1

는 귀하의 테이블 뷰입니다. – aforaudrey

+0

나는 테이블 뷰에 대해 다음과 같은 코드를 가지고있다. self.tableDataSource = tempArray; 그런 다음 tabeDataSource를 plist에 대한 objectAtKey로 설정하는 코드가 있습니다. 처음 실행시 테이블이 잘 채워지지만 앱이 실행되는 동안 데이터를 새로 고칠 수 없습니다. – jrgrs

+0

뜻은 Storyboard/IB의 컨트롤러 등으로 연결된 테이블보기입니까? – aforaudrey

답변

0

이미 문제를 해결했지만 변경해야하는 것이 더 바람직하다는 점을 지적해야합니다.

  1. 위 코드는 App Delegate에 배치하면 안됩니다. TableView를 처리하는 View Controller에 배치해야합니다. 이것은 발사시 훨씬 효율적이고 객체 지향적입니다.
  2. 이 앱을 상점에 제출하려는 경우 NSDocumentsDirectory에 다운로드 한 데이터를 저장하는 데주의해야합니다. 사용자가 언제든지 데이터를 수정할 수 없으면 을 사용하여 NSCachesDirectory에 저장하는 것이 좋습니다. 시도하지 않을 경우 NSLibraryDirectory으로 시도하십시오. iOS5 이후 애플은 다운로드 한 데이터를 NSDocumentsDirectory에 저장하는 것을 좋아하지 않습니다.
  3. 캐싱에 대해 말하면 데이터를 어떤 방식으로 저장해야합니다. 위에 게시 된 코드에서 앱을 실행할 때마다 데이터를 다운로드하고 저장합니다. 이것은 무의미합니다. 인터넷에 연결되어 있지 않으면 앱이 작동하지 않으므로 plist를로드하지 않을 경우 저장하지 않아도됩니다.
  4. 또 다른 점은 을 권장하며 보조 queue에서 네트워크를 가져 오는 것입니다. 기본 큐는 네트워크 페치를 수행하면 차단됩니다. 나는이 경우 파일 크기가 작기 때문에 간신히 눈에 띄지 만 나쁜 인터넷 연결이있는 경우 UI가 어떻게 차단되는지 알 수 있습니다.

iOS 용으로 개발을 시작했을 때 동일한 문제가 발생했기 때문에 이러한 점을 지적했습니다. 이 작업을 수행하는 방법에 대한 정보가 더 이상 필요하지 않다면 언제든지 물어보십시오.

관련 문제