无论如何都要检查是否已经创建了一个类的特定实例。我觉得当你可能还没有创建实例时,很难检查实例是否已经存在。
这是我的代码:
-(IBAction)done:(id)sender
{ //I want to figure out how to check if 'newWindow' already exists before I create another 'newWindow'
SimpleTableView *newWindow = [self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableView"];
[self.navigationController pushViewController:newWindow animated:YES];
}
感谢所有帮助人员。
答案 0 :(得分:3)
是的,有一种简单的方法可以做到。
您只需要对它进行一些引用(例如创建一个属性)并检查它是否为nil
(未初始化)。你可以这样做:
if(!myReference){
//if you get here it means that it hasn't been initialized yet so you have to do it
}
答案 1 :(得分:1)
首先使newWindow
成为伊娃或财产。
然后:
if (!newWindow){
newWindow = [self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableView"];
}
答案 2 :(得分:1)
我给你写了一个检查UINavigationController中所有viewControllers的方法:
- (BOOL)classExistsInNavigationController:(Class)class
{
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:class])
{
return YES;
}
}
return NO;
}
像这样使用:
- (IBAction)done:(id)sender
{
//I want to figure out how to check if 'newWindow' already exists before I create another newWindow
if (![self classExistsInNavigationController:[SimpleTableView class]])
{
SimpleTableView *newWindow = [self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableView"];
[self.navigationController pushViewController:newWindow animated:YES];
}
}
您也可以这样做:
- (UIViewController *)classExistsInNavigationController:(Class)class
{
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:class])
{
return controller;
}
}
return nil;
}
如果你想弹出已经存在的viewController,可以像这样使用它:
- (IBAction)done:(id)sender
{
//I want to figure out how to check if 'newWindow' already exists before I create another newWindow
UIViewController *controller = [self classExistsInNavigationController:[SimpleTableView class]];
if (!controller)
{
SimpleTableView *newWindow = [self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableView"];
[self.navigationController pushViewController:newWindow animated:YES];
}
else
{
[self.navigationController popToViewController:controller animated:YES];
}
}
答案 3 :(得分:0)
您可以使用if / else检查newWindow是否存在。
if (newWindow) { // newWindow is exist to do something
// Do something.
} else { // newWindow is not exist to do something
// Do something.
}
答案 4 :(得分:0)
您可以在要跟踪的班级中实施实例计数器(https://stackoverflow.com/a/30509753/4647396)。 然后检查计数器是否大于0。 如果我正确地解释了你的问题,你只想知道一个实例存在并且不需要引用它。