2013-03-10 3 views
1
// 
// main.m 
// ASADeepDictionary 
// 
// Created by AndrewShmig on 3/10/13. 
// Copyright (c) 2013 AndrewShmig. All rights reserved. 
// 

#import <Foundation/Foundation.h> 
#import "ASADeepDictionary.h" 

int main(int argc, const char * argv[]) 
{ 
@autoreleasepool { 

NSDictionary *dic = @{@"key":@"value"}; 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 

[archiver encodeObject:dic]; 
[archiver finishEncoding]; 

id json = [NSJSONSerialization 
      dataWithJSONObject:data 
      options:0 
      error:nil]; 

NSLog(@"%@", json); 

} 

return 0; 
} 

오류는 다음과 같습니다NSJSONSerialization이있는이 코드가 항상 충돌하는 이유는 무엇입니까? 내가 얻고

2013-03-10 19:48:13.420 ASADeepDictionary[9451:303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00007fff89fb70a6 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff88fac3f0 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff89fb6e7c +[NSException raise:format:] + 204 
    3 Foundation       0x00007fff848bb49d +[NSJSONSerialization dataWithJSONObject:options:error:] + 249 
    4 ASADeepDictionary     0x0000000100001051 main + 321 
    5 libdyld.dylib      0x00007fff84bfd7e1 start + 0 
    6 ???         0x0000000000000001 0x0 + 1 

답변

2

첫 번째 인수가 NSDictionary 또는 NSArray 아닌 NSData해야합니다. 이 방법이하는 일을 오해하고있는 것처럼 보입니다. 을 전달 된 개체로 serialize하며 이 아닙니다.

+0

NSString을 보내면 오류가 발생하지만 충돌이 발생해야한다고 생각하십니까 ?? – user1010819

+0

@ user1010819 왜 오류가 반환되어야합니까? 제약 조건을 위반했습니다 (사전 대신 문자열을 전달했습니다). –

+0

그래, 그거야 !! 지금은 유효한 JSOn 개체인지 확인하기 전에 메서드로 전달합니다. 그러나 오류가 반환됩니다. 적절한 JSON 개체를 전달하지 않으면 반환 될 것이라고 가정합니다. 오류. – user1010819

0
NSDictionary *dic = @{@"key":@"value"}; 

id json = [NSJSONSerialization 
      dataWithJSONObject:dic 
      options:0 
      error:nil]; 

NSLog(@"%@", [NSString stringWithUTF8String:[json bytes]]);