В моем приложении у меня есть пользовательский NSObject, который содержит 2 изменяемых массива. Мне нужно сохранить этот пользовательский объект NSOB в основной объект данных, но у меня нет реальной идеи, как я могу это сделать ...Как сохранить (настраиваемый) NSObject в данных ядра
После некоторого поиска я узнал, что лучшим способом было бы преобразовать nsobject в nsdata и сохранить его в трансформируемом поле объекта ... но я не уверен, как это сделать. Может кто-нибудь мне помочь?
Heres в код для моего пользовательского объекта:
MeasureData.h
@interface MeasureData : NSObject{
}
@property (nonatomic, strong) NSMutableArray *questionsData;
@property (nonatomic, strong) NSMutableArray *answersData;
- (id) init;
@end
MeasureData.m
#import "MeasureData.h"
@implementation MeasureData
@synthesize questionsData;
@synthesize answersData;
#pragma mark -
#pragma mark int
- (id)init
{
self = [super init];
// Initalize questions array (width data from plist)
questionsData = self.makeQuestionsArray;
// NSLog(@"loaded questions array: %@",questionsData); // debug
// Initalize answers array
answersData = self.makeAnswersArray;
// NSLog(@"loaded answers array: %@",answersData); // debug
return self;
}
-(NSMutableArray *)makeQuestionsArray
{
// Initalize questions array (width data from plist)
NSString *path = [[NSBundle mainBundle] pathForResource:
@"questions.list" ofType:@"plist"];
NSMutableArray *questions = [NSMutableArray arrayWithContentsOfFile:path];
/*
[questionsData insertObject:(NSString *)string atIndex:0];
*/
return questions;
}
-(NSMutableArray *)makeAnswersArray
{
// Initalize answers array
NSMutableArray *answers = [NSMutableArray arrayWithCapacity:0];
return answers;
}
-(id)initWithCoder:(NSCoder *)decoder {
if ((self=[super init])) {
questionsData = [decoder decodeObjectForKey:@"questionsData"];
answersData = [decoder decodeObjectForKey:@"answersData"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:questionsData forKey:@"questionsData"];
[encoder encodeObject:questionsData forKey:@"questionsData"];
}
@end
Согласно первому комментарию, я реализовал функции кодирования/кодер для мой пользовательский класс. И попытался архивировать и закодировать его (я новичок в ios, так что это может быть совершенно неправильно) - но это не работает ... может кто-нибудь сказать мне, что не так?
Heres кодирование (которое не работают XD):
NSMutableData *dataToSave = (NSMutableData *)self.measureData;
NSKeyedArchiver *archiverForData = [[NSKeyedArchiver alloc] initForWritingWithMutableData:dataToSave];
[archiverForData encodeObject:dataToSave forKey:@"dataToSave"];
[archiverForData finishEncoding];
//
//theMeasure is the CoreData Entity
theMeasure.result = dataToSave;
что такое тип self.measureData? Вы должны создать новый, пустой объект NSMutableData, вместо того, чтобы отбрасывать ваш measureData ivar (я думаю, это будет тип MeasureData) и использовать encodeObject: self.measeureData на вашем исходном объекте. Также обратите внимание, что вы копируете в 2 раза одну и ту же строку в encodeWithCoder. – MrTJ
спасибо;) Я знаю, использую несколько иной подход (возможно, это то же самое, я не уверен) => Я беру свой объект и использую «NSData * dataToSave = [NSKeyedArchiver archivedDataWithRootObject: measureData]; чтобы преобразовать его в NSData -> эти NSData могут быть сохранены в двоичном атрибуте и могут быть повторно преобразованы через NSKeyUnarchiver ... довольно легко, но мне потребовалось около 4 часов, пытаясь и пытающихся. – jacksbox
да, таким образом я имел в виду изначально! Не жалейте на это 4 часа, я уверен, что вы много изучили;) PS: если вы так думаете, вы также можете «принять» мой ответ, нажав на белый тикер под +/- счетчиком. – MrTJ