У меня есть класс модели, который хранит записи о дорожках, создаваемые несколькими представлениями.У него есть NSMutableDictionary, который имеет поля и значения, которые я в конечном итоге записываю в базу данных.Он сохраняется в листе и при необходимости загружается обратно.Я думал, что отслеживаю свою память, но она выдает EXC_BAD_ACCESS, когда я пытаюсь выпустить словарь.Вот мой интерфейс:
#import <Foundation/Foundation.h>
@interface CurrentEntryModel : NSObject {
NSMutableDictionary *currentEntry;
}
@property (nonatomic, retain) NSMutableDictionary *currentEntry;
- (void) setValue: (NSString *)value;
- (NSString *) getValue;
@end
Я понимаю, что currentEntry должен быть сохранен, и мне пришлось бы освободить его во время dealloc.
Вот моя реализация (это не весь класстолько соответствующие части):
#import "CurrentEntryModel.h"
@implementation CurrentEntryModel
@synthesize currentEntry;
-(id) init {
if ( self = [super init] )
{
//check for file
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *file;
file = @"location.plist";
if ([fileManager fileExistsAtPath:file]){
NSLog(@"file exists");
currentEntry = [[NSMutableDictionary alloc] initWithContentsOfFile:file];
}else {
NSLog(@"file doesn't exist");
currentEntry = [[NSMutableDictionary alloc ] initWithCapacity:1];
NSDate *testDate = [NSDate date];
[currentEntry setObject:testDate forKey:@"created"];
[currentEntry writeToFile:file atomically:YES];
}
}
return self;
}
- (void) setValue: (NSString *)value {
[currentEntry setObject:value forKey:@"location"];
}
- (NSString *) getValue {
return [currentEntry objectForKey:@"location"];
}
- (void) dealloc{
[currentEntry release];
[super dealloc];
}
@end
Если я инициализирую этот класс, он автоматически создаст словарь, и если я вызову один из методов set или get, кажется, что словарь сохраняется, так как он будет правильно освобожден.Если класс только что инициализирован, а затем методы не вызываются, он выдаст ошибки EXC_BAD_ACCESS.Если я не ошибаюсь, когда файл не существует, я неправильно инициализирую словарь, потому что метод начинается со словаря, а не с init.Хотя каждый раз, когда я запускаю этот файл, он всегда присутствует, поэтому он всегда использует логику найденного файла, и я подумал, что она сохранит переменную.
Не правильно ли я инициализирую словарь?
Редактировать- изменил код на удобный метод, чтобы отразить правильный путь.Все принимают к сведению то, что Скуги говорит.