2016-01-16 2 views
0

У меня есть некоторые проблемы с созданием NSString -представления (JSON-string) NSDictionary с использованием NSJSONSerialization. Раньше я использовал JSONKit, но, поскольку его вид устарел в iOS9 (и сбой), я переключился на NSJSONSerialization.NSJSONSerialization создает мусор

Это мой код:

// `userSettings` will be of type NSMutableDictionary* 

NSData* data= [NSJSONSerialization dataWithJSONObject:userSettings options:0 error:&error]; 
NSString* settingsString= [NSString stringWithUTF8String:data.bytes]; 

currentUser.settings= settingsString; // NSString* property 

Теперь, время от времени, этот код работает, но иногда settingsString будет nil. И когда я инспектировать объект данных в отладчике, то bytes свойство показывает JSON-строку с последующим некоторым случайным мусором, как это:

1 = 0x00007ff1ba814000 "{\"residua 
... 
lculatePlanned\":\"0\",\"wizardUserId\":\"\"}UITextColor\x91UISystemColorName\x94UIBaselineAdjustment\x8cUISystemFont\x89NS.intval\x8eUIShadowOffset\x94UIAutoresizeSubviews\x8dUIContentMode\x85NSRGB\x8aUIFontName\x8bUITextLabel\x8eNSInlinedValue\x91UIDetailTextLabel\x99UIUserInteractionDisabled\x9dUITableCellBackgroundColorSet\x94UINibEncoderEmptyKey\x87NSWhite\x8cNSColorSpace\x8fUITextAlignment\xa3UINibAccessibilityConfigurationsKey\x92UIAutoresizingMask\x99UIProxiedObjectIdentifier\x87UIAlpha\x87UIWhite\x9aUIFontDescriptorAttributes\x8cUIFontTraits\x86NSSize\x95UIColorComponentCount\x91UIMinimumFontSize\x86UIText\x96UIMultipleTouchEnabled\x8dUIDestination\x94UIMi..." 
              ^start of garbage after end of dictionary 

Что я делаю неправильно?

ответ

3

Не используйте , он полагается на массив байтов A с концевыми символами NULL и существует только NULL-терминатор случайно, и это может быть хорошо после окончания ожидаемой вами функции.

Вместо этого используйте:

- (instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding 

Ex:

NSString *settingsString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
+0

Лучше никогда не преобразовать данные в NSString вообще. NSData будет работать отлично. И JSON не гарантированно будет UTF-8 в любом случае. – gnasher729

+0

Может быть веская причина: я делаю это иногда во время отладки. – zaph

+0

Спасибо, кажется, работает :) – user826955