我正在使用Objective-C开发macOS应用。
我试图将NSArray对象保存在Core Data中。我写
- (id)reverseTransformedValue:(id)value
{
return [NSKeyedUnarchiver unarchivedObjectOfClass:[NSArray class] fromData:value error:nil];
}
在继承NSValueTransformer的类中。
并且我的NSArray对象中的元素之一不是主要种类(其属性称为courseName和courseInfos),因此我符合该元素的类。在本课中,我写道:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [[self class] new];
if (self = [super init])
{
self.courseName = [aDecoder decodeObjectForKey:@"courseName"];
self.courseInfos = [aDecoder decodeObjectForKey:@"courseInfos"];
}
return self;
}
运行我的应用程序时,将调用reverseTransformedValue:方法,并对我的NSArray对象中除特殊非主要元素之外的所有元素进行解码。我在该特殊元素的类的initWithCoder:方法中放置了一个断点,并且它永远不会运行。我使用了一些工具,发现元素已成功存储在核心数据中,因此其编码过程没有问题。
答案 0 :(得分:0)
我已修复它,这是解决方法:
我的对象是“地址”(注意:它不是NSArray)
地址.h
@implementation Address
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [self init];
if (self == nil)
{
return nil;
}
self.street = [aDecoder decodeObjectOfClass:[Address class] forKey:@"street"];
self.city = [aDecoder decodeObjectOfClass:[Address class]
forKey:@"city"];
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.street forKey:@"street"];
[encoder encodeObject:self.city forKey:@"city"];
}
+ (BOOL)supportsSecureCoding
{
return YES;
}
地址.m
@property (nonatomic, strong) Address *address;
Archive.h
UserDBO *userDBO = [[UserDBO alloc] init];
Archive.m
NSError *error = nil;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.address requiringSecureCoding:YES error:&error];
if(error)
{
NSLog(@"archivedDataWithRootObject: %@", error);
}
userDBO.address = data;
//存档
Address *address = [NSKeyedUnarchiver unarchivedObjectOfClass:[Address class] fromData:userDBO.address error:&error];
if(error)
{
NSLog(@"unarchivedObjectOfClass: %@", error);
}
//取消存档
@property (nonatomic, strong) NSData *address;
UserDBO.h
def first_rpt(M):
for i in range(1, len(M)):
M[i]=M[0]
return