gpt4 book ai didi

iphone - Cocoa Touch 序列化对象。解码后尝试读取自定义类的数据成员会导致程序崩溃

转载 作者:行者123 更新时间:2023-11-28 20:45:56 24 4
gpt4 key购买 nike

在尝试对我创建的对象进行编码和解码时,我遇到了一个似乎相当奇怪的错误。我相信我使该对象及其包含的所有对象都符合 NSCoding 和 NSCopying。我正在尝试对一个 NSMutableArray 进行编码,其中填充了具有 NSString 标题的“目标”和一个也符合协议(protocol)的“ActionSteps”的 NSMutableArray。我可以很好地编码对象,当我解码对象时,它们响应不处理数据成员的函数调用,但是当我尝试读取“目标”的标题时,程序崩溃了,我得到了这个错误信息:

-[__NSArrayM isEqualToString:]: 无法识别的选择器发送到实例 接着是堆栈跟踪,最后是:程序收到信号:“SIGABRT”。

当我尝试访问目标中“ActionSteps”的标题时,我收到了相同的错误消息。

这是我为符合协议(protocol)而编写的“目标”类代码。

#pragma mark NSCoding
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:goalName forKey:GoalNameKey];
[encoder encodeObject:actionSteps forKey:ActionStepsKey];
}

这次我尝试打印出解码器返回的任何内容,因为它应该是一个 NSString,但我遇到了同样的崩溃。

- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
goalName = [[decoder decodeObjectForKey:GoalNameKey] retain];
NSLog((NSString *)[decoder decodeObjectForKey:GoalNameKey]);
actionSteps = [[decoder decodeObjectForKey:ActionStepsKey] retain];
}
return self;
}

#pragma mark -
#pragma mark NSCopying
- (id)copyWithZone:(NSZone *)zone {
Goal *copy = [[[self class] allocWithZone: zone] init];
copy.goalName = [[self.goalName copyWithZone:zone] autorelease];
copy.actionSteps = [[self.actionSteps copyWithZone:zone] autorelease];
return copy;
}

这是编码包含我所有“目标”的主要 NSMutableArray 的代码:

[NSKeyedArchiver archiveRootObject:goalViewController.goals toFile:[self dataFilePath]];

解码:

NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
goalViewController.goals = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
}
else {
goalViewController.goals = [[NSMutableArray alloc]init];
}

当我在解码后尝试读取“目标”的标题时发生错误

label.text = self.goal.goalName;

最佳答案

您在两个解码调用中都有 ActionStepsKey:

goalName = [[decoder decodeObjectForKey:ActionStepsKey] retain];
actionSteps = [[decoder decodeObjectForKey:ActionStepsKey] retain];

第一个应该有GoalNameKey:

goalName = [[decoder decodeObjectForKey:GoalNameKey] retain];
actionSteps = [[decoder decodeObjectForKey:ActionStepsKey] retain];

关于iphone - Cocoa Touch 序列化对象。解码后尝试读取自定义类的数据成员会导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com