Как сохранить/прочитать NSMutableArray, заполненный объектами, для которых я создал класс?Сохранение NSMutableArray, заполненного пользовательскими объектами
Это то, что я до сих пор ... (где «Objecta» представляет свой класс, и «объекты» представляет собой массив, содержащий множество примеров «Objecta»)
//Creating a file
//1) Search for the app's documents directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//2) Create the full file path by appending the desired file name
NSString *documentFileName = [documentsDirectory stringByAppendingPathComponent:@"save.dat"];
//Load the array
objects = [[NSMutableArray alloc] initWithContentsOfFile: _documentFileName];
if(objects == nil)
{
//Array file didn't exist... create a new one
objects = [[NSMutableArray alloc]init];
NSLog(@"Did not find saved list, Created new list.");
}
else
{
NSLog(@"Found saved list, Loading list.");
}
Это загрузит массив если он существует. Он работает, если массив заполнен объектами типа свойств, такими как NSNumbers, я тестировал это. Если я заполню его своими собственными объектами, он сработает! Это ошибка: (где «objectAInt» является частным ИНТ, принадлежащий «Objecta»)
-[__NSCFNumber objectAInt]: unrecognized selector sent to instance 0x15d417f02013-11-19 17:28:58.645 My Project[1791:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectAInt]: unrecognized selector sent to instance 0x15d417f0'
Что мне нужно сделать, чтобы мой класс, «Objecta», работа с сохранения/чтения процесса, как это происходит с NSNumbers и другими объектами NS типа (id)?
Спасибо!
P.S. Мой класс реализует и совместим с NSCoding. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать! :)
EDIT - Вот мой Objecta (по желанию) (это подкласс NSObject)
//
// ObjectA.m
// My Project
//
// Created by Will Battel on 8/8/13.
//
//
#import "ObjectA.h"
@implementation ObjectA
@synthesize objectAString, objectAString2, objectAString3, objectAInt;
-(id)initWithName:(NSString *)_objectAString{
self = [super init];
objectAString = _objectAString;
objectAInt = 2;
objectAString3 = @"$0.00";
return self;
}
-(id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (self) {
NSLog(@"Decoding");
[self setObjectAString:[decoder decodeObjectForKey:@"objectAStringKey"]];
[self setObjectAString2:[decoder decodeObjectForKey:@"objectAString2Key"]];
[self setObjectAString3Price:[decoder decodeObjectForKey:@"objectAString3Key"]];
[self setobjectAInt:[decoder decodeIntForKey:@"objectAIntKey"]];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)encoder {
NSLog(@"Encoding");
[encoder encodeObject:objectAString forKey:@"objectAStringKey"];
[encoder encodeObject:objectAString2 forKey:@"objectAString2Key"];
[encoder encodeObject:objectAString3 forKey:@"objectAString3Key"];
[encoder encodeInt:objectAInt forKey:@"objectAIntKey"];
}
@end
вы должны показать нам соответствующий код NSCoding. вы говорите, что это реализовано. возможно, это неисправно. – vikingosegundo
Это вполне возможно, я добавлю! – WillB
Когда я запускаю это, запускается NSLog (@ «Кодирование»), но NSLog (@ «Декодирование») никогда не идет. – WillB