将nsdictionary转换为nsdata

Pad*_*215 12 iphone objective-c nsdictionary uiimagepickercontroller nsdata

有一个应用程序,可以拍照,然后上传到服务器.将它编码为base 64并将其通过XMLRPC传递给我的php服务器.

我想获取从UIImagePickerController委托返回的NSDictionary信息

-(void) imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary *)info
Run Code Online (Sandbox Code Playgroud)

并将其转换为NSData,以便我可以对其进行编码.

那么,我如何将NSDictionary转换为NSData?

Per*_*ion 24

您可以使用NSKeyedArchiver将NSDictionary序列化为NSData对象.请注意,字典中的所有对象都必须是可序列化的(在其继承树中的某个位置实现NSCoding)才能使其工作.

懒得通过我的项目来提升代码,所以这里有一些来自互联网:

编码

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:yourDictionary forKey:@"Some Key Value"];
[archiver finishEncoding];
[archiver release];
/** data is ready now, and you can use it **/
[data release];
Run Code Online (Sandbox Code Playgroud)

解码:

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *myDictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain];
[unarchiver finishDecoding];
[unarchiver release];
[data release];
Run Code Online (Sandbox Code Playgroud)

  • UIImage无法使用NSKeyedArchiver进行序列化,无需解决问题. (2认同)

Him*_*jan 5

NSDictionary-> NSData:

    NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myDictionary];
Run Code Online (Sandbox Code Playgroud)

NSData-> NSDictionary:

    NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:myData];
Run Code Online (Sandbox Code Playgroud)