我是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