Я пытаюсь сохранить некоторые постоянные данные в приложении iOS, используя NSKeyedArchiver для записи в файл, и я хотел бы получить эти данные позже, используя NSKeyedUnarchiver. Я создал очень базовое приложение для тестирования кода, но без успеха. Вот методы, которые я использую:Невозможность установить/получить данные с помощью NSKeyedArchiver/NSKeyedUnarchiver в файле
- (void)viewDidLoad
{
[super viewDidLoad];
Note *myNote = [self loadNote];
myNote.author = @"MY NAME";
[self saveNote:myNote]; // Trying to save this note containing author's name
myNote = [self loadNote]; // Trying to retrieve the note saved to the file
NSLog(@"%@", myNote.author); // Always logs (null) after loading data
}
-(NSString *)filePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent: @"myFile"];
return filePath;
}
-(void)saveNote:(Note*)note
{
bool success = [NSKeyedArchiver archiveRootObject:note toFile:[self filePath]];
NSLog(@"%i", success); // This line logs 1 (success)
}
-(Note *)loadNote
{
return [NSKeyedUnarchiver unarchiveObjectWithFile:[self filePath]];
}
Класс, который я использую, чтобы проверить этот код выглядит следующим образом:
Note.h
#import <Foundation/Foundation.h>
@interface Note : NSObject <NSCoding>
@property NSString *title;
@property NSString *author;
@property bool published;
@end
Note.m
#import "Note.h"
@implementation Note
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init])
{
self.title = [aDecoder decodeObjectForKey:@"title"];
self.author = [aDecoder decodeObjectForKey:@"author"];
self.published = [aDecoder decodeBoolForKey:@"published"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.title forKey:@"title"];
[aCoder encodeObject:self.author forKey:@"author"];
[aCoder encodeBool:self.published forKey:@"published"];
}
@end
Я видел аналогичные примеры с использованием NSUserDefaults (https://blog.soff.es/archiving-objective-c-objects-with-nscoding), bu t Я хотел бы сохранить эти данные в файле, поскольку, насколько я знаю, NSUserDefaults используется в основном для хранения пользовательских настроек, а не для общих данных. Я что-то упускаю? Заранее спасибо.