gpt4 book ai didi

ios - 编码和解码自定义对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:26 25 4
gpt4 key购买 nike

我在编码和保存包含 MKMapItem 的自定义对象列表到 NSUserDefaults 时遇到问题。

首先,我从用于 tableView 的 MKMapItem 数组中获取选定的 MKMapItem,并将其存储在我的 sharedManager 实例中。 (稍后将使用 sharedManager 中的所有值来创建自定义对象)。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// Get the tapped MKMapItem
MKMapItem *selectedMapItem = self.searchResults[indexPath.row];

// Create a sharedManager instance
MyManager *sharedManager = [MyManager sharedManager];

// Set the workRegion and workLocation in sharedManager
NSLog(@"selectedMapItem: %@", [selectedMapItem name]);
sharedManager.workLocation = selectedMapItem;

// Post a notification to alert the PreviewMapViewController
[[NSNotificationCenter defaultCenter] postNotificationName:@"showAnnotations" object:self.searchResults];
[[NSNotificationCenter defaultCenter] postNotificationName:@"zoomToAnnotation" object:selectedMapItem];
[[NSNotificationCenter defaultCenter] postNotificationName:@"showMap" object:nil];
}

enter image description here enter image description here

这是我用来从 sharedManager 获取 MKMapItem 并将其放入我创建的自定义对象中的代码:

MyManager *sharedManager = [MyManager sharedManager];
newModel.workLocation = sharedManager.workLocation;

我的自定义对象将 workLocation 存储在其头文件中,其属性如下:

@property (nonatomic, strong) MKMapItem *workLocation;

这是我对 workLocation 对象进行编码和解码的实现文件:

@implementation WorkLocationModel

-(id)init {
// Init self
self = [super init];
if (self)
{
// Setup
}
return self;
}

- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.workLocation forKey:@"workLocation"];
}

-(instancetype)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self)
self.workLocation = [coder decodeObjectForKey:@"workLocation"];
return self;
}

@end

enter image description here

我的断点设置为捕获 encodeObject 行上的所有异常中断。

当我将此自定义对象添加到 NSMutableArray 然后使用以下方法保存该数组时发生错误:

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:_myObjects] forKey:@"myObjects"];

异常:-[MKMapItem encodeWithCoder:]: 无法识别的选择器发送到实例 0x7f9f14acf400

谁能帮我解决这个问题?

更新:

NSData *workLocationData = [NSKeyedArchiver archivedDataWithRootObject:sharedManager.workLocation];

最佳答案

MKMapItem 不符合 NSCodingSSecureCoding

您需要对各个项目进行编码,并在解码时重新创建一个 MKMapItem

关于ios - 编码和解码自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009460/

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