从AppDelegate调用的UIViewController中的方法不使用现有对象

时间:2013-04-19 03:39:36

标签: ios objective-c uiviewcontroller appdelegate bump

我一直在疯狂地试图弄清楚这一点,并且根据我的知识尝试了一切。我希望有人能解决这个问题,让我解释一下我目前的设置。

我在iOS应用中使用Bump-api。我在 AppDelegate 中有configureBump method,它在应用的初始启动时调用。因此,应用程序从一开始就连接到Bump服务器。

接下来,我有一个NavigationController,其中包含以下顺序堆叠的以下UIViewControllers:

ViewControllerA - > ViewControllerB - >的 ViewControllerC

VCA (ViewControllerA)是启动应用时的第一个视图。在ViewWillLoad我有以下代码:

myAppDelegate = [[UIApplication sharedApplication] delegate];
[myAppDelegate vibrateBump:NO];

vibrateBump AppDelegate 中的一种方法,我用它来关闭&碰撞。在这种情况下,我想在 VCA 上关闭它,因为我没有什么可以转移的。

但是,在 VCB 中,我有vibrateBump:YES的相同代码条,这就是我想让Bump工作的地方。这一切都很好,不要担心我到了那里。

现在,在 AppDelegate 中的configureBump方法中,我设置了在碰撞时从 VCB 调用方法。这是事情变得怪异的时候。以下是 VCB

中调用方法的示例
@implementation VCB {
   FMDatabase * db;
}

- (void)viewDidLoad{
   //db is set up here...
}

-(void) otherMethodWithinVC{
   //Some action here...
}

-(void) myMethod:(NSArray*)myArray{
   [db open] //This does now work

   Do some stuff here.... //All this works

   [db close] //This does now work
   [self otherMethodWithinVC] //This does now work
}

为什么[db open]无效?好像还有另一个myMethod实例被调用。当我在测试时更改它并决定在db内创建myMethod时,db开始有效。

以下是我在configureBump方法中设置的方法:

- (void) configureBump {
    VCB * vcb = [[VCB alloc] init];

    [[BumpClient sharedClient] setChannelConfirmedBlock:^(BumpChannelID channel) {
       //Some action here...
    }];

    [[BumpClient sharedClient] setDataReceivedBlock:^(BumpChannelID channel, NSData *data) {
        dataArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

        if([dataArray count]>0){
            if([vcb myMethod:dataArray];
        }
    }];

    //Some action here...

}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当你从appdelegate调用mymethod时,你正在创建一个不同的VCB控制器实例,但是在

的情况下
myAppDelegate = [[UIApplication sharedApplication] delegate]; 

您正在创建appdelegate的单个实例,如单身