2015-10-29 7 views
1
NSMutableDictionary *elementsMDic = [NSMutableDictionary new]; 
for (int i = 0 ; i < maxRssiMArray.count; i++) { 

    NSString *majorStr = [NSString stringWithFormat:@"%@",[maxRssiMArray[i]valueForKey:@"major"]]; 
    NSString *minorStr = [NSString stringWithFormat:@"%@",[maxRssiMArray[i]valueForKey:@"minor"]]; 
    NSInteger rssiInt = [[maxRssiMArray[i] valueForKey:@"rssi"] intValue]; 

    [elementsMDic setValue:@"guest" forKey:@"user_name"]; 
    [elementsMDic setValue:majorStr forKey:@"major"]; 
    [elementsMDic setValue:minorStr forKey:@"minor"]; 
    [elementsMDic setValue:@(rssiInt) forKey:@"rssi"]; 
    [elementsMDic setValue:submitTime forKey:@"submit_time"]; 
    [elementsMDic setValue:HERE_BEACON_UUID forKey:@"beacon_uuid"]; 

    [maxRssiDicMArray addObject:elementsMDic]; 
} 
NSLog(@"%@",maxRssiDicMArray); 

Я получаюObjectiveC NSMutableArray добавить NSMutableDictionary выпуск

{ 
    "beacon_uuid" = "myUUID"; 
    major = 65535; 
    minor = 65535; 
    rssi = "-95"; 
    "submit_time" = "2015-10-29_17:45:56"; 
    "user_name" = guest; 
}, 

мой вопрос почему-то не получите "" другие получают не "" Я думаю, что это должно быть, как это

 { 
    "beacon_uuid" = "myUUID"; 
    "major" = 65535; 
    "minor" = 65535; 
    "rssi" = -95; 
    "submit_time" = "2015-10-29_17:45:56"; 
    "user_name" = "guest"; 
}, 

, потому что мой Ключи - это все NSString, а также мои majorStr и minorStr все NSString, тоже

, пожалуйста, сообщите меня почему и как решить, почему!

+0

Неплохой вопрос, но верно ли этот код нарушен? Вы перечисляете массив и многократно устанавливаете значения в один словарь. Это не так. Также ваше использование 'stringWithFormat' и' valueForKey' просто неверно; например, это правильно (и кратким): 'NSString * majorStr = maxRssiMArray [i] [@" major "];'. – trojanfoe

+0

Для «одиночных слов» с буквами, которые легко понять как строковые объекты, ему не нужны кавычки. Но [описание объекта] не является проблемой для этого. – Larme

ответ

1

Что вы получаете - это вывод на консоль, который использует свойство описания объектов, которые он выдает. Согласно яблочным документам (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/#//apple_ref/occ/instp/NSDictionary/description), это предназначено для читаемости, а не для сериализации объектов. поэтому цитаты, которые вы видите, только там, чтобы помочь вам прочитать их. строковые значения с пустым пространством или другими конкретными символами, такими как символ подчеркивания, обернуты в кавычки, строковые значения без них. Вы не можете решить эту проблему, так как функция работает по назначению. так как вы не сказали нам, что вы пытаетесь сделать, предлагая альтернативы, становится гадательной игрой. если вам нужны данные, которые вы можете записать в файл и получить позже, вы должны просмотреть списки свойств (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048i) или NSArchiver (https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArchiver_Class/index.html). Если это предназначено для отправки по сети, возможно, NSJSONSerialization делает то, что вам нужно? https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/

0

Словарь является правильным, это просто проявление поведения NSLog

Если ключ или значение содержит только буквенно-цифровые символы, не отображаются двойные кавычки.

NSDictionary *dict = @{@"key" : @"value"}; 
NSLog(@"%@", dict); 

{ключ = значение; }

В противном случае, если ключ или значение содержит пробелы, подчеркивания или другие специальные символы

NSDictionary *dict = @{@"key 1" : @"value 1"}; 
NSLog(@"%@", dict); 

отображаются двойные кавычки.

{"ключ 1" = "значение 1"; }

PS: ли не Используйте valueForKey:/setValue:forKey: для получения/установки значений словаря.
Указанные методы: objectForKey:/setObject:forKey:.

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