我是Objective C新手,想知道是否有人可以帮助我。如何将NSManagedObjects的NSArray转换为NSData
我正在使用sqlite数据库的核心数据来保存具有名称和分数属性(都是NSString类型)的简单配置文件对象。
我想要做的是获取配置文件,并将它们存储在一个NSData对象,请参阅下面我的代码:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"GamerProfile" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
NSArray *sortDecriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDecriptors];
[sortDescriptor release];
[sortDecriptors release];
NSError *error;
NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:items];
[self SendData:data];
[fetchRequest release];
当我跑我得到错误“终止应用程序由于代码未捕获的异常“NSInvalidArgumentException”,原因:“*** - [GamerProfile encodeWithCoder:]:无法识别的选择发送到实例0x3f4b530””
我相信我有一个encodeWithCoderClass添加到我的核心数据NSManagedObject对象(GamerProfile),但我即使在阅读documentation之后,我也不确定该怎么做,我的尝试如下。我不知道我是否沿着这条线走,因为得到一个警告,说明“NSManagedObject”可能不会响应'-encodeWithCoder'“
我真的很感激,如果有人能指点我正确的方向!!
由于
ç
这里是我的GamerProfile(CoreData NSManagedObject对象)与我在添加encodeWithCoder方法尝试代码...
头文件
#import <CoreData/CoreData.h>
@interface GamerProfile : NSManagedObject <NSCoding>
{
}
@property (nonatomic, retain) NSString * GamerScore;
@property (nonatomic, retain) NSString * Name;
- (void)encodeWithCoder:(NSCoder *)coder;
@end
代码文件
#import "GamerProfile.h"
@implementation GamerProfile
@dynamic GamerScore;
@dynamic Name;
- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder];
[coder encodeObject:GamerScore forKey:@"GamerScore"];
[coder encodeObject:Name forKey:@"Name"];
}
非常感谢Ole! – carok 2010-03-02 08:51:52
我同意@Ole - 但有一种方法可以使其工作,如果需要,我在他提供的链接上添加了对问题的回复。基本上,'initWithEncoder:'必须调用'[super initWithEntity:insertIntoManagedObjectContext:]' - 要做到这一点,你需要一个全局变量来获取你正在解析的上下文 – bshirley 2011-07-07 03:47:26