2014-04-08 2 views
-1

Я создаю NSDictionary, используя код ниже, и я ожидаю, что ключ @ "originalMessageId" содержит [NSNull null], когда originalMessageId.intValue == -1.Почему [NSNull null] значение не добавлено в NSDictionary?

Но мой метод Logger writeToLogFile дает следующий вывод:

2014-04-07 19:16:52: JSON Params: { 
    addressId = 1; 
} 

Я раздел код туда, где он только пытается добавить два ключа, и до сих пор это не добавляет ключа originalMessageId.

Куда я иду не так?

P.S. Код не работает, когда я загружаю приложение в качестве сборки сборки, но, похоже, работает, когда загружаю приложение в качестве сборки разработки.

NSDictionary *jsonDict; 

SourcePhoneNumber *sourcePhoneNumber = [DatabaseInterface fetchDefaultSourceNumber]; 

[Logger writeToLogFile:[NSString stringWithFormat:@"sourcePhoneNumber = %@", sourcePhoneNumber]]; 

if (originalMessageId.intValue == -1) 
{ 
    //NSString *uuidString = [[NSUUID UUID] UUIDString]; 

    jsonDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
       [NSNumber numberWithUnsignedLongLong:1], @"addressId", /* should be sourcePhoneNumber.addressId */ 
       //messageBody, @"messageBody", 
       //contacts, @"contacts", 
       //uuidString, @"clientId", 
       [NSNull null], @"originalMessageId", 
       nil]; 
} 
else 
{ 
    jsonDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
       [NSNumber numberWithUnsignedLongLong:1], @"addressId", /* should be sourcePhoneNumber.addressId */ 
       originalMessageId, @"originalMessageId", 
       messageBody, @"messageBody", 
       contacts, @"contacts", 
       nil]; 
} 

[Logger writeToLogFile:[NSString stringWithFormat:@"JSON Params: %@", jsonDict]]; 
+0

Почему вы используете архаичный метод настройки словаря, а не (более приятную) встроенную версию? –

+1

Знаете ли вы, что 'originalMessageId.intValue' равно' -1'? если это не '-1', а' originalMessageId' - 'nil', вы получите вывод, который видите. – rmaddy

+0

@rmaddy, который не кажется правильным, если originalMessageID равен нулю, вы получите исключение. «Если какой-либо ключ равен нулю, возникает исключение NSInvalidArgumentException». https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html#//apple_ref/doc/uid/20000140-CBHCIFDD – RobP

ответ

3

выход вы видите будет, если originalMessageId является nil. Это приведет к тому, что ваше состояние if не сработает с частью else. И если `originalMessageId - nil, то nil прекращает создание словаря в этой точке, оставляя только ключ addressId и его значение.

Таким образом, вам необходимо определить, почему originalMessageId является nil.

+0

Я не хочу спешить с нисходящим на случай, если ошибаюсь, но см. Мой комментарий выше. Я почти уверен, что ноль в середине вы получаете исключение, а не более короткий словарь. – RobP

+0

@RobP Смотрите мой комментарий к вашему выше. – rmaddy

+0

@RobP, как сказал rmaddy, initWithObjectsAndKeys: итерации через пары значений/ключей, пока не встретит значение nil. Это вызовет только исключение, если значение не равно нулю, а ключ равен нулю. Если originalMessageId равен нулю, тогда originalMessageId.intValue = 0, вы попадаете в предложение else и получаете результаты, которые видите. –

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