2013-06-27 2 views
1

외부 소스에서 NSJSONSerialization을 사용하여 UITableView에 데이터를 표시하는 상황이 있습니다. 장치가 오프라인 모드 인 경우이 데이터를 표시해야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 데이터를 저장하고 wifi를 확인하고 사용할 수없는 경우 로컬 데이터를 표시하려면 내부 DB가 필요합니까?장치에 네트워크 연결이없는 경우 데이터를 표시하는 방법은 무엇입니까?

도움이나 자습서를 제공해 주셔서 감사합니다.

답변

2

는 내가 일하고 응용 프로그램에 대한 비슷한 요구 사항을 가지고있다. parse.com (원격 객체)에서 데이터를 가져와 데이터를 핵심 데이터 (로컬 객체)에 저장합니다. 테이블 뷰를 표시 할 때 백그라운드에서 parse.com 쿼리를 실행합니다.이 쿼리는 데이터를 가져 와서 코어 데이터에 넣습니다. 테이블 뷰는 NSFetchedResultsController을 사용하므로 코어 데이터 (로컬) 오브젝트가 변경되면 데이터가 검색 될 때 테이블 뷰가 업데이트됩니다. 오프라인 상태이면 아무 것도 검색되지 않으므로 테이블 뷰는 업데이트되지 않지만 개체의 마지막 업데이트가 표시됩니다.

2

예. 당신은 그 일을하기 위해 로컬 데이터베이스를 만들 수 있습니다.

Wi-Fi 상태를 확인할 수 있습니다. 외부 소스의 데이터를 표시하는 것보다 네트워크 연결을 사용할 수 있고 로컬 데이터베이스의 데이터를 표시하는 것보다 네트워크 연결을 사용할 수없는 경우.

1

온라인으로 외부 소스에서 데이터를 검색 할 때 로컬로 저장합니다. 앱이 시작됩니다 다음 시간 : 네트워크 연결을 사용할 수 사용이 로컬에 저장된 데이터가 아닌 경우 네트워크 연결에 대한

  • 확인 네트워크 연결이 데이터를 검색하고 볼 수 있습니다
  • 경우 이전 내용
  • 를 다시 쓰기

데이터는 plist, database file에 또는 text file로서 저장 될 수있다.

0

즉, CoreData 데이터베이스을 사용하여 연결할 때마다 데이터를 업데이트 할 수 있습니다. 연결할 수 없으면 이전 데이터 만 표시하십시오.

사용 방법 및 SO WiFi 연결을 확인하는 한 정도로 내용보다 더 제공하는 방법, 그것은 너무 많이하지 않은 경우

0

당신은 PLIST에 데이터를 저장할 수 있습니다.)

-(void)Writetoplist:(NSMutableDictionary*)LoginDetails 

{

{ 
    //////// This is used to delete the plist file if exist ////// 
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
documentsDirectory = [paths objectAtIndex:0]; 
plistPath = [documentsDirectory stringByAppendingPathComponent:@"LoginDetails.plist"]; 

NSError *error; 
    if(![[NSFileManager defaultManager] removeItemAtPath:plistPath error:&error]) 
     { 
      //TODO: Handle/Log error 
     } 

     /// to write the SP Details in plist file 
     paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     documentsDirectory = [paths objectAtIndex:0]; 
     // get the path to our plist ("Documents/foo.plist") 
     plistPath = [documentsDirectory stringByAppendingPathComponent:@"LoginDetails.plist"]; 
     [LoginDetails writeToFile:plistPath atomically:YES]; 
     } 

}