У меня есть свойство, которое меняется на недопустимое при переходе между viewDidLoad и viewWillAppear. Я понятия не имею, почему это происходит.
У меня есть вспомогательный класс, который получает путь к моей базе данных. Я выделяю этот класс в делегате приложения. RootViewController получает ссылку на appDelegate следующим образом:
//inside .h file
@interface RootViewController : UITableViewController
<UITableViewDelegate, UITableViewDataSource>{
NSArray *controllers;
myAppDelegate *appDelegate;
}
//inside .m file
@implementation RootViewController
@synthesize controllers;
- (void)viewDidLoad {
appDelegate = [[UIApplication sharedApplication] delegate];
self.controllers = appDelegate.topicControllers;
[super viewDidLoad];
}
Я наведите курсор мыши на appDelegate, чтобы найти вспомогательный класс базы данных и свойство, содержащее путь к базе данных:
NSPathStore2 * appDelegate.databaseHeper.databasePath "/Users/userA/Library/Application Support/iPhone Simulator/User/Applications..."
databasePath объявлен строкой NSString. Почему он изменился на NSPathStore2?
Когда я продолжаю в отладчике, происходит другая странная вещь. Как только я попадаю в viewWillAppear, значение свойства становится «недействительным», а тип возвращается к NSString. Хотя я даже видел там UIButton.
Почему он становится недействительным? Я больше не могу использовать переменную.
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; //changes before this line executes
}
Я ничего не делаю между viewDidLoad и viewWillAppear. Вот как databasePath назначается в классе databaseHelper, что происходит ранее в applicationDidFinishLaunching:
- (NSString *) getDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:self.databaseName];
}
stringByAppendingPathComponent возвращает строку NSString. Почему я получаю NSStorePath2 через некоторое время после назначения?
Теперь у меня все работает без проблем, но я просто вызываю [databaseHelper getDBpath]. Моя цель - сохранить несколько циклов процессора и сохранить это значение. Отсюда databasePath. Любые предложения, почему databasePath изменяется на недопустимый?