2014-01-13 2 views
-4

Я новичок в разработке IOS и я звоню веб-службы, которая возвращает мне данные, такие какJSON ответ и NSDictionary

[ 
    { 
     "ID": "3416a75f4cea9109507cacd8e2f2aefc3416a75f4cea9109507cacd8e2f2aefc", 
     "Name": "2M Enerji" 
    }, 
    { 
     "ID": "072b030ba126b2f4b2374f342be9ed44072b030ba126b2f4b2374f342be9ed44", 
     "Name": "Çedaş" 
    }, 
    { 
     "ID": "093f65e080a295f8076b1c5722a46aa2093f65e080a295f8076b1c5722a46aa2", 
     "Name": "Çelikler" 
    }, 
    { 
     "ID": "7cbbc409ec990f19c78c75bd1e06f2157cbbc409ec990f19c78c75bd1e06f215", 
     "Name": "Çoruh EDAŞ" 
    }, 
    { 
     "ID": "70efdf2ec9b086079795c442636b55fb70efdf2ec9b086079795c442636b55fb", 
     "Name": "İçdaş" 
    } 
] 

Сейчас я пытаюсь получить его в массив, массив будет индивидуальный для имя и идентификатор, я сделал до принятия в NSDICT Ниже мой код

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"finish loading"); 
    NSString *loginStatus = [[NSString alloc] initWithBytes:[webData mutableBytes] 
                length:[webData length] 
                encoding:NSUTF8StringEncoding]; 

    NSString *responsewith = [[NSString alloc] initWithData:webData 
                encoding:NSUTF8StringEncoding]; 
    //providerData = [NSKeyedUnarchiver unarchiveObjectWithData:webData]; 
    providerDropData = [NSString stringWithFormat:responsewith]; 
    NSLog(@"drop %@",providerDropData); 

    NSArray *providerData = [providerDropData valueForKey:@"ID"]; 
    NSLog(@"jey %@",responsewith); 
    NSLog(@"resonser %@",responsewith); 
    NSLog(@"laoding data %@",loginStatus); 
    //greeting.text = loginStatus; 
    [loginStatus release]; 
    [connection release]; 
    [webData release]; 
} 

Когда я попытался сохранения NSDictionary к NSArray для @"ID" приложение получить разбился.

Пожалуйста, помогите

+2

NSDICT ??? что это? – Tirth

+3

«приложение разбилось» - это очень описательно. Постарайтесь объяснить, что это значит и что такое ошибка? –

+0

Вам нужно перечислить ваш словарь и добавить строковые объекты в массив. – suhit

ответ

0

Вы можете получить данные из JSON, как показано ниже, как хорошо,

id jsonObjectData = [NSJSONSerialization JSONObjectWithData:webData error:&error]; 
    if(jsonObjectData){ 
    NSMutableArray *idArray = [jsonObjectData mutableArrayValueForKeyPath:@"ID"]; 
    NSMutableArray *nameArray = [jsonObjectData mutableArrayValueForKeyPath:@"Name"]; 
} 
+0

if (providerDropData) { idArray = [поставщикDropData mutableArrayValueForKeyPath: @ "ID"]; NSMutableArray * nameArray = [поставщикDropData mutableArrayValueForKeyPath: @ "Name"]; providerData = [поставщикDropData mutableArrayValueForKey: @ "ID"]; NSLog (@ "% d count of array", providerData.count); } это работает сейчас у меня есть в providerData, и он показывает правильный счет, но не показал в моем столе, можете ли вы помочь? – user3089900

0

Преобразование данных в NSDictionary путем анализа, то можно извлечь с помощью КВП.

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:response options:0 error:&error]; 
+0

Я сделал webdata мой NSDATA – user3089900

+0

Извините, обновил ответ. –

+0

Я уже преобразовал – user3089900

1

Вы просто хотите использовать NSJSONSerialization

NSError *error = nil; 
NSArray *results = [NSJSONSerialization JSONObjectWithData:webData options:0 error:&error]; 
if (!results) 
    NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error); 

// get the first provider id 

NSString *providerData = results[0][@"ID"]; 
+0

NSString * providerData = результаты [0] [@ "ID"]; это похоже на ошибку 'ожидаемый метод для чтения элемента, который не найден в объектном типе NSDictonary' – user3089900

+0

@ user3089900 заменить' NSDictionary * results' на 'NSArray * results' – Desdenova

+0

[6:22:18 PM] Laurel John: 2014-01-13 18: 21: 14.554 Engerjit [885: 11303] - [__ NSArrayM objectForKeyedSubscript (inlove): непризнанный селектор отправлен в экземпляр 0xecb60b0 2014-01-13 18: 21: 14.555 Engerjit [885: 11303] *** Завершение приложения из-за неотображения исключение «NSInvalidArgumentException», причина: '- [__ NSArrayM objectForKeyedSubscript (inlove): нераспознанный селектор, отправленный в экземпляр 0xecb60b0' *** Стек первого вызова вызова: – user3089900

0
NSDictionary * providerDropData = [NSJSONSerialization JSONObjectWithData:webData error:&error]; 
NSLog(@"drop %@",providerDropData); 

NSMutableArray *providerData = [NSMutableArray new]; 
NSString *key = @"ID"; 
for (key in providerDropData){ 
    NSLog(@"Key: %@, Value %@", key, [providerDropData objectForKey: key]); 
    [providerData addObject:[providerDropData objectForKey:key]]; 
} 

NSLog("ID Array = %@", providerData]); 
} 
+1

Если вам нужен массив этих значений ID, вы также можете просто указать NSArray * providerData = [поставщикDropData valueForKey: @ "ID"]; '. – Rob

+0

2014-01-13 18:36:32.604 Engerjit [1042: 11303] - [__ NSArrayM objectForKey (inlove): непризнанный селектор, отправленный в экземпляр 0x75c3250 2014-01-13 18: 36: 32.605 Engerjit [1042: 11303] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException» , причина: '- [__ NSArrayM objectForKey (inlove): непризнанный селектор, отправленный экземпляру 0x75c3250' *** Первый стек вызовов броска: – user3089900

+0

@ user3089900 Эта ошибка (и та, которую вы указали выше в другом ответе) предполагает, что JSON Не то, что ты сказал. Зарегистрируйте 'providerDropData' (или« результаты »в моем ответе) и обновите свой вопрос. – Rob

Смежные вопросы