для сохранения вашего массива на диск вам понадобится пара вещей.
сначала вам нужно добавить несколько методов к вашему классу фруктов, чтобы он соответствовал протоколу NSCoding .
Первый метод - - (id)initWithCoder:(NSCoder *)aDecoder
.Этот метод вызывается при создании объекта Fruit из сохраненного архива.
Второй метод - - (void)encodeWithCoder:(NSCoder *)aCoder
.Этот метод используется для сохранения ваших фруктов в архиве.
Звучит сложно?На самом деле это не так.Всего пара строк понятного кода.
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.instructions = [aDecoder decodeObjectForKey:@"instructions"];
self.explanation = [aDecoder decodeObjectForKey:@"explanation"];
self.imagePath = [aDecoder decodeObjectForKey:@"imagePath"];
}
return self;
}
Посмотрите на первые две строки этого метода init.Вы должны позвонить [super init]
и проверить, не равен ли self
ноль и в вашем методе initWithName:instructions:explination:imagePath:
.В этом особом случае это ничего не изменит, но определенно изменится в следующих нескольких написанных вами классах.Так что используйте это все время.
Я изменил это для вас.И я изменил орфографическую ошибку.
- (id)initWithName: (NSString*)n instructions:(NSString*)inst explination:(NSString *)why imagePath:(NSString *)img {
self = [super init];
if (self) {
self.name = n;
self.instructions = inst;
self.explanation = why;
self.imagePath = img;
}
return self;
}
и метод кодирования:
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:name forKey:@"name"];
[aCoder encodeObject:instructions forKey:@"instructions"];
[aCoder encodeObject:explanation forKey:@"explanation"];
[aCoder encodeObject:imagePath forKey:@"imagePath"];
}
Не обязательно, чтобы имя ключа совпадало с именем переменной.Вам не нужно делать это.Но, на мой взгляд, это добавляет ясности.Пока вы декодируете с тем же именем, которое использовали для кодирования, вы можете использовать все, что захотите.
Первая часть выполнена.Далее вам нужно загрузить и сохранить NSMutableArray в файл.Но для этого вам нужен путь к каталогу документов.Поэтому я создал небольшой вспомогательный метод, который используется в вашем контроллере.
- (NSString *)applicationDocumentsPath {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
Затем нам нужно загрузить массив с диска.
NSString *path = [[self applicationDocumentsPath] stringByAppendingPathComponent:@"some.fruits"];
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
if (!array) {
// if it couldn't be loaded from disk create a new one
array = [NSMutableArray array];
}
Затем вы добавляете столько фруктов, сколько хотите.и, наконец, чтобы сохранить ваш массив на диск, вам нужна эта строка.
BOOL result = [NSKeyedArchiver archiveRootObject:array toFile:path];
вы можете проверить результат, если архив был выполнен без ошибок.
Полагаю, это должно помочь вам начать.Удачного кодирования.