我试图序列化一个包含一组类型(自定义对象)的SearchEntity
对象(自定义对象)。NSMutableDictionary
CategoryEntity
1SearchEntity<NSCoding>
包含:1 个NSMutableDictionary
(参数)参数,其中CategoryEntities<NSCoding>
包含仅包含字符串和数字的 X。
在 SearchEntity encodeWithCoder" 的这一行[encoder encodeObject:parameters forKey:kPreviousSearchEntityKey];
中,我每次都得到 GDB:Interrupted,没有错误消息、异常等。只是 GDB:Interrupted。
这是实现SearchEntity
,参数是NSMutableDictionary
#pragma mark -
#pragma mark NSCoding delegate methods
- (void) encodeWithCoder:(NSCoder*)encoder
{
//encode all the values so they can be persisted in NSUserdefaults
if (parameters)
[encoder encodeObject:parameters forKey:kPreviousSearchEntityKey]; //GDB:Interrupted!
}
- (id) initWithCoder:(NSCoder*)decoder
{
if (self = [super init])
{
//decode all values to return an object from NSUserdefaults in the same state as when saved
[self setParameters:[decoder decodeObjectForKey:kPreviousSearchEntityKey]];
}
return self;
}
还实现了 NSCoding 协议,CategoryEntity
如下所示:
- (void) encodeWithCoder:(NSCoder*)encoder
{
//encode all the values so they can be persisted in NSUserdefaults
[encoder encodeObject:ID forKey:kIDKey];
[encoder encodeObject:text forKey:kTextKey];
[encoder encodeObject:category forKey:kCategoryKey];
[encoder encodeObject:categoryIdentifierKey forKey:kCategoryIdentifierKey];
}
- (id) initWithCoder:(NSCoder*)decoder
{
if (self = [super init]) {
//decode all values to return an object from NSUserdefaults in the same state as when saved
[self setID:[decoder decodeObjectForKey:kIDKey]];
[self setText:[decoder decodeObjectForKey:kTextKey]];
[self setCategory:[decoder decodeObjectForKey:kCategoryKey]];
[self setCategoryIdentifierKey:[decoder decodeObjectForKey:kCategoryIdentifierKey]];
}
return self;
}
我尝试从 NSUserDefaults 的包装器中对其进行编码,如下所示:
+ (void) setPreviousSearchParameters:(SearchParameterEntity*) entity
{
if (entity)
{
//first encode the entity (implements the NSCoding protocol) then save it
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:entity];
[[self defaults] setObject:encodedObject forKey:kPreviousSearchKey];
[[self defaults] synchronize];
}
}
+ (SearchParameterEntity*) getPreviousSearchParameters
{
//retrieve the encoded NSData object that was saved, decode and return it
SearchParameterEntity *entity = nil;
NSData *encodedObject = [[self defaults] objectForKey:kPreviousSearchKey];
if (encodedObject)
entity = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return entity;
}
我在想,当我要求序列化 SearchEntity 时,它会开始序列化“参数” mutableDictionary 对象,NSCoder 将对字典中包含的 CategoryEntities 调用“encode”,它们都会以正确的编码对象响应。
但是我只是在控制台底部得到 GDB:Interrupted 。
我该如何调试呢?
我的方法错了吗,我应该在 NSData 中包装所有级别的编码吗?
附言。ResultEntity
我对包含的 NSArrays做了完全相同的事情CategoryEntities
,它编码没有问题,所以我猜 NSMutableDictionary 是唯一突出的东西。