2016-04-01 4 views
0

基本的に私はサーバー側から応答を得て、それをローカルのfile.Actuallyに保存しました。サーバー側から応答を取り出し、ドキュメントディレクトリに保存しました。フェッチしようとしていますが、NSStringのみで、 NSDictionary ....これは次のコードですNSDictionaryでローカルJSONファイルの応答にアクセスしてUITableViewで表示する方法は?

- (IBAction)loginButtonPressed:(id)sender 
{ 
    NSString *URLString = @"http://localhost/rest/login"; 

    AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; 
    manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    NSDictionary *params = @{@"username": userNameTxtField.text, @"password": pwdTextField.text}; 
    NSLog(@"Parameters:\n%@",params); 

    [manager POST:URLString parameters:params progress:nil success:^(NSURLSessionDataTask *operation, id responseObject) 
    { 

     NSLog(@"Successfully Login ....: %@", responseObject); 

     NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

     path = [NSString stringWithFormat:@"%@/sample.json", documents]; 

     NSOutputStream *stream = [[NSOutputStream alloc] initToFileAtPath:path append:YES]; 
     [stream open]; 

     NSError *writeError = nil; 

     NSInteger bytesWritten = [NSJSONSerialization writeJSONObject:responseObject toStream:stream options:NSJSONWritingPrettyPrinted error:&writeError]; 

     if ((bytesWritten = 0)) 
     { 
      NSLog(@"Error writing JSON Data"); 
     } 
     else{ 
      NSLog(@"Sucessfuly saved data..."); 
     } 
      [stream close]; 

     NSLog(@"path is :%@",path); 

    } failure:^(NSURLSessionDataTask *operation, NSError *error) 

    { 
     NSLog(@"Error: %@", error); 
    }]; 
} 

- (IBAction)fetch:(id)sender 
{ 
    NSError *deserializingError; 
    NSData *data=[NSData dataWithContentsOfFile:path]; 
    NSString *jsonString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&deserializingError]; 

    NSMutableDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

    NSLog(@"vaues are:%@",dict); 
} 
+0

応答からデータを取得し、テーブルにそれをアレイと負荷を保存します。 – user3182143

+0

ローカルファイルに格納する代わりに。コアデータ、Sqlite、NSUserDefaultを保存することができます。したがって、アプリケーションのどこからでもアクセスできます。 –

+0

返信ありがとうございますが、私はファイルフォーマットを維持する必要がありますので、実際に私はNSDataのコンテンツを持っていますがバイトフォーマットですので、キーと値のフォーマットとしてそれらを取得したいので、あまりにも多くのファイルを維持する必要があります。 –

答えて

0

あなたの応答オブジェクトはNSDictionaryのタイプでなければなりません。したがって、writeToFileAtPathメソッドを使用して、ドキュメントディレクトリに保存することができます。

辞書を再作成するときは、NSDictionaryのallocおよびinitWithContentsOfFileメソッドを使用して、NSDictionaryインスタンスを直接作成できます。

Google検索を少し行うと、それを行う方法がたくさんあります。

+0

>レスポンスオブジェクトはNSDictionaryの型である必要があります。本当に? –

+0

ハイエルトマト。この人は、以下のLOCを指定しました。つまり、ライブラリがjsonを解析し、私が正しい場合、それを基礎オブジェクトに変換します。manager.responseSerializer = [AFJSONResponseSerializerシリアライザ]; –

+0

こんにちはEIトマトはい..私のresposeObjectは、キーと値を含むnsdictionary形式です –

0

試してみてください!それは正常に動作しています。

  NSMutableDictionary *testStore = [[NSMutableDictionary alloc] init]; 
      [testStore setObject:@"vignesh" forKey:@"username"]; 
      [testStore setObject:@"password" forKey:@"password"]; 

      NSError *error; 
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:testStore // Here you can pass array or dictionary 
                   options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string 
                   error:&error]; 
      NSString *jsonString; 
      if (jsonData) { 
       jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
       //This is your JSON String 
       //NSUTF8StringEncoding encodes special characters using an escaping scheme 
      } else { 
       NSLog(@"Got an error: %@", error); 
       jsonString = @""; 
      } 


      [self writeStringToFile:jsonString]; 

      NSLog(@"Your JSON String is %@", [self readStringFromFile]); 

     - (void)writeStringToFile:(NSString*)aString { 

      // Build the path, and create if needed. 
      NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString* fileName = @"bookmark.json"; 
      NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName]; 

      if (![[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) { 
       [[NSFileManager defaultManager] createFileAtPath:fileAtPath contents:nil attributes:nil]; 
      } 

      // Write to file 
      [[aString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO]; 
     } 

     - (NSString*)readStringFromFile { 

      // Build the path... 
      NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString* fileName = @"bookmark.json"; 
      NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName]; 

      // read from file 
      return [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding]; 
     } 
+0

申し訳ありませんが、まだ私は問題に直面しています... –

+0

は答えを得ました...協力してくれてありがとう皆さん..... –

+0

あなたはそれを修正する方法? –

0
static const char *dbPath = nil; 
static sqlite3_stmt *ermsg = nil; 
static sqlite3 *studs =nil; 
static DatabaseOperation *_sharedInstances = nil; 

@implementation DatabaseOperation 
@synthesize databasePath; 

+(DatabaseOperation*)sharedInstances{ 
    if(!_sharedInstances){ 
     _sharedInstances =[[super allocWithZone:nil]init]; 
    } 
    return _sharedInstances; 
} 
+(id)allocWithZone:(struct _NSZone *)zone{ 
    return [self sharedInstances]; 
} 
-(id)init{ 
    NSLog(@"Only first time Instances using Singleton:"); 
    self =[super init]; 
    if(self){ 
     [self CreateDbpath]; 
    } 
    return self; 
} 

-(BOOL)CreateDbpath{ 

    NSArray *dbpaths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *docdir=[[NSString alloc]initWithString:[dbpaths objectAtIndex:0]]; 

    self.databasePath =[[NSString alloc]initWithString:[docdir stringByAppendingPathComponent:@"Mindset.sqlite"]]; 

    NSFileManager *flg = [NSFileManager defaultManager]; 

    BOOL isSucess = false; 

    if([flg fileExistsAtPath:databasePath]==NO){ 

     char *ermsgss = nil; 

     char const *dbpathss =[self.databasePath UTF8String]; 

     if(sqlite3_open(dbpathss, &studs)==SQLITE_OK){ 

      char *sqlQurery ="create table if not exists emp(name text,city text,img blob)"; 

      if(sqlite3_exec(studs, sqlQurery, nil, nil, &ermsgss)!=SQLITE_OK){ 
       NSLog(@"Failed to creat table:"); 
      } 
      else{ 
       NSLog(@"Sucessfully to create table:"); 
      } 

     } 
     sqlite3_close(studs); 
    } 
    return isSucess; 
} 

-(void)insertDatabaseValue:(DataManagers *)getInserted{ 

    dbPath = [self.databasePath UTF8String]; 

    if(sqlite3_open(dbPath, &studs)==SQLITE_OK){ 

     NSString *sqlQuery=[[NSString alloc]initWithFormat:@"insert into emp values(?,?,?)"]; 

     const char *_sqlQuery=[sqlQuery UTF8String]; 

     if(sqlite3_prepare_v2(studs, _sqlQuery, -1, &ermsg, nil)==SQLITE_OK){ 

      sqlite3_bind_text(ermsg, 1, [getInserted.userName UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text(ermsg, 2, [getInserted.cityName UTF8String], -1, SQLITE_TRANSIENT); 

      NSData *jpegData =[[NSData alloc]init]; 

      NSData *imgeData =UIImageJPEGRepresentation(getInserted.profileImg, 0.85f); 

      UIImage *imgesData =[UIImage imageWithData:imgeData]; 

      CGRect rect = CGRectMake(0, 0, 185, 150); 

      UIGraphicsBeginImageContext(rect.size); 

      [imgesData drawInRect:rect]; 

      UIImage *img =UIGraphicsGetImageFromCurrentImageContext() 
      ; 
      UIGraphicsEndImageContext(); 

      jpegData = UIImageJPEGRepresentation(img, 0.01f); 

      sqlite3_bind_blob(ermsg, 3, [jpegData bytes], [jpegData length], SQLITE_TRANSIENT); 

      if(sqlite3_step(ermsg)==SQLITE_DONE){ 

       NSLog(@"Sucessfully inserted into db:"); 
      } 
      else{ 
       NSLog(@"Error %s",sqlite3_errmsg(studs)); 
      } 


     } 

     sqlite3_close(studs); 
     sqlite3_finalize(ermsg); 
    } 

} 

-(NSMutableArray*)getAllData{ 

    NSMutableArray *array =[[NSMutableArray alloc]init]; 

    dbPath = [self.databasePath UTF8String]; 

    if(sqlite3_open(dbPath, &studs)==SQLITE_OK){ 

     NSString *sqlQuery =[[NSString alloc]initWithFormat:@"select * from emp"]; 

     const char *_sqlQuery =[sqlQuery UTF8String]; 

     if(sqlite3_prepare_v2(studs, _sqlQuery, -1, &ermsg, nil)==SQLITE_OK){ 

      while (sqlite3_step(ermsg)==SQLITE_ROW) { 

       DataManagers *mgr =[[DataManagers alloc]init]; 

       NSString *_Firstname = (const char*)sqlite3_column_text(ermsg, 0) ? [NSString stringWithUTF8String:(const char*)sqlite3_column_text(ermsg, 0)]:nil; 

       mgr.userName = _Firstname; 

       NSString *lastName =(const char*)sqlite3_column_text(ermsg, 1)?[NSString stringWithUTF8String:(const char*)sqlite3_column_text(ermsg, 1)]:nil; 

       mgr.cityName = lastName; 

       int imgBytes = sqlite3_column_bytes(ermsg, 2); 

       UIImage *img =[UIImage imageWithData:[NSData dataWithBytes:sqlite3_column_blob(ermsg, 2) length:imgBytes]]; 

       mgr.profileImg = img; 

       [array addObject:mgr]; 

      } 


     } 
    } 
    return array; 
} 
関連する問題