2016-12-24 2 views
0

Я пытаюсь JSONSerialize в NSArray, что я получаю от NSFetchRequest, но когда я называю isValidJSONObject я в конечном итоге в той части, где он говорит мне, что это не действуетПочему я не могу JSONSerialize этого NSArray?

код выглядит следующим образом, и я в конечном итоге в «Отказ» не работает в отладке.

Отладочный вывод массива выглядит следующим образом.

2016-12-24 11:55:38.362 NWMobileTill[1007:69570] WebServices:synchOrder:orderHeadsArray: (
     { 
     amountTax = 0; 
     companyId = Kalle; 
     createdDateUtc = "2016-12-24 03:55:25 +0000"; 
     isSynched = 0; 
     orderNumber = "1-20161224115525"; 
     orderType = 0; 
     status = 0; 
     sumAfterTrDiscount = 0; 
     sumBeforeTrDiscount = 0; 
     tillId = 1; 
     trDiscountAmount = 0; 
     trDiscountPercentage = 0; 
     userName = 1; 
    } 
) 
+1

Пользовательские объекты не являются действительные данные JSON. Прочитайте документацию для 'NSJSONSerialization' для описания действительных данных JSON. – rmaddy

+1

Проблема, скорее всего, является значением «NSDate» в словаре, который не соответствует JSON. – vadian

+0

Да, это был формат даты, когда я получил это отсортированное правильно, все это работает –

ответ

0

Это должно быть работа. это мой эксперимент из ваших собственных данных и кода. он работает нормально, как вы ожидали.

NSArray *test = @[@{@"amountTax" : @0, 
        @"companyId" : @"Kalle", 
        @"createdDateUtc" : @"2016-12-24 03:55:25 +0000", 
        @"isSynched" : @(false), 
        @"orderNumber" : @"1-20161224115525", 
        @"orderType" : @0, 
        @"status" : @(false), 
        @"sumAfterTrDiscount" : @0, 
        @"sumBeforeTrDiscount" : @0, 
        @"tillId" : @1, 
        @"trDiscountAmount" : @0, 
        @"trDiscountPercentage" : @0, 
        @"userName" : @1 
        }]; 

NSLog(@"Test:%@", test); 

if ([NSJSONSerialization isValidJSONObject:test]) { 
    NSLog(@"works"); 
} else { 
    NSLog(@"Does not work"); 
} 

отладки выход:

Test:(
    { 
    amountTax = 0; 
    companyId = Kalle; 
    createdDateUtc = "2016-12-24 03:55:25 +0000"; 
    isSynched = 0; 
    orderNumber = "1-20161224115525"; 
    orderType = 0; 
    status = 0; 
    sumAfterTrDiscount = 0; 
    sumBeforeTrDiscount = 0; 
    tillId = 1; 
    trDiscountAmount = 0; 
    trDiscountPercentage = 0; 
    userName = 1; 
} 
) 
2016-12-24 13:38:34.098 sample[2628:58572] works 

isValidJSONObject используется для возвращает логическое значение, указывающее, является ли данный объект может быть преобразован в данные JSON. Если вы проверяете недопустимый объект NSArray, он вернет false. Но, согласно вашему коду и настроил мой собственный массив, он верен. Проверьте, правильны ли ваши объекты массива или нет, а также проверьте, пуст ли этот массив или нет. Если массив пуст, он возвращается как false.

+0

, вероятно, потому, что вы написали NSDate как NSString!? –

+0

да, что я написана как строка. –

+0

так что это не то же самое, и вы не даете ответа;) –

0

Проблемы заключалась в том, что NSDate не может быть сериализовать как указано Vadian в комментариях, с помощью следующей даты форматировщика это решило проблему и то NSArray может быть JSONSerialized правильно

Создать дату следующим образом и настройку dateFormatter

NSDate *createdDate = [NSDate date]; 

NSDateFormatter *dateFormatterWithTz = [[NSDateFormatter alloc] init]; 
[dateFormatterWithTz setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]; 

Тогда при сохранении даты для постоянного хранения использовать форматировщик следующим

[newTenderRow setValue:[dateFormatterWithTz stringFromDate:createdDate] forKey:@"createdDate"]; 
Смежные вопросы