gpt4 book ai didi

ios - 序列化包含未实现 NSCoding 的类的 NSMutableArray

转载 作者:行者123 更新时间:2023-11-28 21:47:34 25 4
gpt4 key购买 nike

我需要将 NSMutableArray 保存到磁盘以存储我的应用程序数据。我知道那里有很多类似的问题,但我发现没有一个能涵盖我的问题。

我不想为了保存一个 NSMutableArray 而集成 Core Data。通常我会去实现 NSCoding 协议(protocol)并使用 NSKeyedUnarchiver。不幸的是,我的数据模型类有一些来自库的外部类,这些类没有实现 NSCoding 协议(protocol)。

那么我存储数组的最佳方式是什么?

这是我尝试过的方法,但由于给定的原因,它不起作用:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <ForeignFramework/ForeignFramework.h>

@interface DEModelClass : NSObject <NSCoding>

@property (nonatomic,strong) ForeignFramework *foreignFramework;
@property (nonatomic,strong) UIImage *image;
@property (nonatomic,copy) NSNumber *number1;
@property (nonatomic,copy) NSNumber *number2;

@end


#define kEncodeKeyForeign @"kEncodeKeyForeign"
#define kEncodeKeyImage @"kEncodeKeyImage"
#define kEncodeKeyNumber1 @"kEncodeKeyNumber1"
#define kEncodeKeyNumber2 @"kEncodeKeyNumber2"


#pragma mark - NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.foreignFramework forKey:kEncodeKey];
[aCoder encodeObject:self.image forKey:kEncodeKeyImage];
[aCoder encodeObject:self.number1 forKey:kEncodeKeyNumber1];
[aCoder encodeObject:self.number2 forKey:kEncodeKeyNumber2];

}

- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super init]))
{
self.foreignFramework = [aDecoder decodeObjectForKey:kEncodeKeyForeign];
self.image = [aDecoder decodeObjectForKey:kEncodeKeyImage];
self.number1 = [aDecoder decodeObjectForKey:kEncodeKeyNumber1];
self.number2 = [aDecoder decodeObjectForKey:kEncodeKeyNumber2];

}
return self;
}

最佳答案

你应该使用NSCoding协议(protocol),你可以使用它。

一个。我假设您知道要存储外部类的哪些属性。 (可能是让您在加载时重新实例化实例对象的数据。)如果不是,则无法存储它们。当然,Cocoa,NSArray,$whatever 无法知道它。这些是通用的。

B.当您完成选择要存储的属性后,只需将一个类别添加到为您完成这项工作的外部类:

@interface ForeignClass (MyCodingAddition)
- (void)encodeWithCoder:(NSCoder*)encoder;
- (id)initWithCoder:(NSCoder*)decoder;
@end

@implementation ForeignClass (MyCodingAddition)
- (void)encodeWithCoder:(NSCoder*)encoder
{
[coder encodeObject:self.property withKey:…]

}

- (id)initWithCoder:(NSCoder*)decoder
{
self = [super init];
if (self)
{
self.property = [decode objectForKey:…];

}
return self;
}
@end

关于ios - 序列化包含未实现 NSCoding 的类的 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29514712/

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