Я думаю, что это вопрос новичка об управлении данными.
У меня есть приложение, которое загружает и сохраняет различные текстовые файлы.Я хотел бы дать каждому txt-файлу определенные характеристики, которые не сохраняются в txt-файле, такие как имя, стиль, цвет и т. Д.
До сих пор я имел NSMutableArray * myLibrary, в который я сохранял бывсе эти ссылки.Массив выглядит следующим образом:
Теперь мой большой вопрос - это лучший и самый безопасный способсохранить эти данные.До сих пор я работал с NSKeyedArchiver, но пользователи сообщали о потере данных, и был один странный случай, когда синхронизация iTunes якобы приводила к ошибкам в данных.NSUserDefaults какой-либо заставки?Я сохраняю myLibrary.dat каждый раз, когда пользователь вносит изменения, поэтому я не совсем понимаю, почему это не должно быть на 100%.Буду очень признателен за любые советы / предложения / объяснения!
Вот код, с помощью которого я пишу и читаю myLibrary.Dat:
-(NSString*)documentsDirectory
{
NSLog(@"documentsDirectory");
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
return documentsDirectory;
}
-(void)saveLibraryDat {
NSLog(@"Saving myLibrary.dat...");
NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:@"myLibrary.dat"];
BOOL succeed = [[NSKeyedArchiver archivedDataWithRootObject:myLibrary] writeToFile:filePath atomically:YES];
if (!succeed){ // do something }
}
-(void)loadLibraryDat {
NSLog(@"loadLibraryDat");
NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:@"myLibrary.dat"];
self.myLibrary = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
if (self.myLibrary == nil) {
NSLog(@"myLibrary.dat empty... set up new one");
[self setupLibrary];
} else { NSLog(@"Loading myLibrary.dat successful."); }
}
РЕДАКТИРОВАТЬ: Мои методы кодера выглядяткак это:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
self.titleName = [aDecoder decodeObjectForKey:@"titleName"];
self.fileName = [aDecoder decodeObjectForKey:@"fileName"];
self.fileFont = [aDecoder decodeObjectForKey:@"fileFont"];
self.tabTitles = [aDecoder decodeObjectForKey:@"tabTitles"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:titleName forKey:@"titleName"];
[aCoder encodeObject:fileName forKey:@"fileName"];
[aCoder encodeObject:fileFont forKey:@"fileFont"];
[aCoder encodeObject:tabTitles forKey:@"tabTitles"];
}
@end
в заголовке они определены как:
NSString *titleName;
NSString *fileName;
NSString *fileFont;
NSMutableArray *tabTitles;