Развернуть массив словаря - PullRequest
0 голосов
/ 04 июня 2018

У меня есть массив словарей из firebase, как показано ниже:

"gcm.notification.data" = "{\"request\":\"update_location\",\"latitude\":\"45.48945419494574\",\"customMessage\":{\"loc-args\":[\"iPhone di Tester\"],\"loc-key\":\"LOCATION_CHECKIN\"},\"type\":\"checkin\",\"message\":\"Ggg\",\"longitude\":\"9.195329826333742\",\"child\":{\"name\":\"iPhone di Tester\",\"pid\":\"C312EDDC-E8A8-4EFC-9E65-957BE5DAC5FC\"}}";

Я пытался развернуть запрос, как показано ниже, но он вылетает, может кто-нибудь помочь.

 NSDictionary *gcmnotificationdat = [userInfo objectForKey:@"gcm.notification.data"];
    NSString *request = [gcmnotificationdat objectForKey:@"request"];

1 Ответ

0 голосов
/ 04 июня 2018

У тебя крушение.Как разработчик важно прочитать это.Вы можете или понимать это или нет, но вы, конечно, можете искать это, и это вполне известно.Это основное сообщение о сбое, которое должен знать любой разработчик iOS.Если вы этого не сделаете, поделитесь им с нами.Вы получите больше шансов получить ответы.

Самая важная часть:

-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x100002090

Это означает, что вы пытаетесь вызвать метод objectForKey: для объекта NSString,NSString не знает этого, и поэтому он аварийно завершает работу.

Значение ключа gcm.notification.data является строковым JSON.

Так что [userInfo objectForKey:@"gcm.notification.data"]; на самом деле NSStringне NSDictionary.

Давайте исправим это сейчас:

//Creation of the sample for the sake of the test
NSDictionary *userInfo = @{@"gcm.notification.data": @"{\"request\":\"update_location\",\"latitude\":\"45.48945419494574\",\"customMessage\":{\"loc-args\":[\"iPhone di Tester\"],\"loc-key\":\"LOCATION_CHECKIN\"},\"type\":\"checkin\",\"message\":\"Ggg\",\"longitude\":\"9.195329826333742\",\"child\":{\"name\":\"iPhone di Tester\",\"pid\":\"C312EDDC-E8A8-4EFC-9E65-957BE5DAC5FC\"}}"};

//Parsing
NSString *gcmNotificationJSONString = [userInfo objectForKey:@"gcm.notification.data"];
NSData *gcmNotificationJSONData = [gcmNotificationJSONString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *gcmNotification = [NSJSONSerialization JSONObjectWithData:gcmNotificationJSONData options:0 error:nil];
NSString *request = [gcmNotification objectForKey:@"request"];
NSLog(@"Request: %@", request);

Примечание: я удалил часть «dat» имен переменных, которую вы использовали, потому что ключ заканчивается на «data»"не путать NSString, NSData и NSDictionary, как я явно назвал их из класса.Я неправильно набираю класс в комментарии, будьте осторожны и исправьте его из кода здесь.

...