检查类的特定实例是否已存在

时间:2014-01-05 22:05:38

标签: ios objective-c class instance

无论如何都要检查是否已经创建了一个类的特定实例。我觉得当你可能还没有创建实例时,很难检查实例是否已经存在。

这是我的代码:

-(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];
}

感谢所有帮助人员。

5 个答案:

答案 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。 如果我正确地解释了你的问题,你只想知道一个实例存在并且不需要引用它。