Bil*_*uel 4 iphone serialization json objective-c sbjson
如何在objective-c中序列化以下类,以便它可以与SBJson一起使用?
当我使用此代码时,我得到"动物不支持JSON序列化"错误.
有人能指出我哪里错了吗?
Animal.h文件的内容如下
#import <UIKit/UIKit.h>
@interface Animal : NSObject<NSCoding> {
NSString *name;
NSString *description;
NSString *imageURL;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *imageURL;
-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u;
@end
Run Code Online (Sandbox Code Playgroud)
Animal.m文件的内容如下
#import "Animal.h"
@implementation Animal
@synthesize name, description, imageURL;
-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u {
self.name = n;
self.description = d;
self.imageURL = u;
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super initWithCoder:aDecoder])
{
name = [[aDecoder decodeObjectForKey:@"name"] retain];
description = [[aDecoder decodeObjectForKey:@"description"] retain];
imageURL = [[aDecoder decodeObjectForKey:@"imageURL"] retain];
}
return [self initWithName:name description:description url:imageURL];
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[super encodeWithCoder:encoder];
[encoder encodeObject:name forKey:@"name"];
[encoder encodeObject:description forKey:@"description"];
[encoder encodeObject:imageURL forKey:@"imageURL"];
}
@end
Run Code Online (Sandbox Code Playgroud)
使您的自定义类符合NSCoding协议,然后序列化它.
有关详细信息,请访问Apple文档
此外,此链接也将帮助您.如此链接中所示,将自定义类存档到NSData并按照Apple文档中的说明对其进行序列化.
编辑
让你Animal.m如下:
#import "Animal.h"
@implementation Animal
@synthesize name, description, imageURL;
-(id)initWithName:(NSString *)n description:(NSString *)d url:(NSString *)u {
self = [super init];
if( self )
{
self.name = n;
self.description = d;
self.imageURL = u;
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if( self )
{
self.name = [aDecoder decodeObjectForKey:@"name"];
self.description = [aDecoder decodeObjectForKey:@"description"];
self.imageURL = [aDecoder decodeObjectForKey:@"imageURL"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:name forKey:@"name"];
[encoder encodeObject:description forKey:@"description"];
[encoder encodeObject:imageURL forKey:@"imageURL"];
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16294 次 |
| 最近记录: |