簡體   English   中英

如何訪問NSDictionary中的本地JSON文件響應以顯示在UITableView中?

[英]How to Access local JSON file response in NSDictionary for showing in UITableView?

基本上我從服務器端得到響應,然后將其保存在本地文件中。實際上,我從服務器端獲取了響應,然后將其保存到documents目錄中,現在試圖獲取,但是它僅在NSString中出現,我無法進入NSDictionary。 ...這是以下代碼

- (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);
}

您的響應對象應為NSDictionary類型。 因此,您可以使用其writeToFileAtPath方法將其保存到文檔目錄。

重新創建字典時,可以使用NSDictionary的alloc和initWithContentsOfFile方法直接創建NSDictionary實例。

如果您進行一些Google搜索,就會有大量的帖子介紹如何做到這一點!

嘗試這個!! 一切正常。

            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];
        }
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 isSuccess = false;

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

        char  *ermsgss = nil;

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

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

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

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

        }
        sqlite3_close(studs);
    }
    return isSuccess;
}

-(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(@"Successfully 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM