gpt4 book ai didi

ios - 单例类为其 NSString 属性返回 nil 值

转载 作者:行者123 更新时间:2023-11-28 21:33:09 25 4
gpt4 key购买 nike

我有一个单例类,并且在其中声明了一个属性:

@property (nonatomic, strong) NSString *currentTableName;
+ (SuperNoteManager*)sharedInstance;

.m 文件:

+ (SuperNoteManager*)sharedInstance
{
static SuperNoteManager *_sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[SuperNoteManager alloc] init];
});
return _sharedInstance;
}

当我第一次运行我的应用程序时,数据库中没有数据,所以它显示 EmptyViewController

@property (nonatomic, strong) SuperNoteManager *myManager;


-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
_myManager=[SuperNoteManager sharedInstance];
}

-(void)changeRootView{

UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

HomeViewController *hVC=[storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];

UINavigationController *mNavVC=[storyboard instantiateViewControllerWithIdentifier:@"MainNavigationController"];

mNavVC.viewControllers=@[hVC];

[[UIApplication sharedApplication].keyWindow setRootViewController:mNavVC];

}

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];

if ( [_myManager checkForDataInAllTables]) {
NSLog(@"All tables are empty");
}else{
//a note is saved, show home view controller
if (![_myManager isDatabaseEmpty]) {
[self changeRootView];
}

}

}

EmptyNotesViewController 上的 NavigationBar 上有 + 按钮,点击“+”, NotesViewControllerEmptyNotesViewController 推送。在 NotesViewController 中,我写了一些笔记后,将笔记保存在数据库中:

NotesViewController:

@property (nonatomic,strong) SuperNoteManager *myManager; 

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
_myManager.currentTableName=@"WorkTable";
}

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];

if (self.isMovingFromParentViewController) {
NSLog(@"going back");
[self insertTextintoDatabase]; //Text is inserted . I double checked
}

}

然后当我回到我的 EmpytNotesViewController 时,我检查数据,如果数据存在,我更改 rootViewController,因为它不是 EmptyNotesView 了。

所以当我回到我的 EmptyNotesViewController 时:

   -(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];

if ( [_myManager checkForDataInAllTables]) {
NSLog(@"All tables are empty");
}else{
//a note is saved, show home view controller

//Put a breakpoint here
if (![_myManager isDatabaseEmpty]) {
[self changeRootView];
}

}

}

在断点处 _myManager.currentTableNamenil为什么? 我在NotesController里设置了,回到EmptyNotesController里就变成nil了。

我认为一旦在单例中设置了一个值,只要应用程序关闭/终止,它就会一直存在。

注意:我已经将我的 Singleton 类的属性声明为 strong,并且单例中的所有属性都声明为 strong。

最佳答案

看起来您从未像在 EmptyNotesController 中那样在 NotesViewController 中获得对 SuperNoteManager 单例的引用。

因此,currentTableName 属性一开始就不会设置。

你要插入:

_myManager = [SuperNoteManager sharedInstance];

-viewDidAppear: 中设置 currentTableName 属性之前。

关于ios - 单例类为其 NSString 属性返回 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com