0

我一直在让自己发疯,试图弄清楚这一点,并且据我所知,我已经尝试了几乎所有事情。我希望有人能解决这个问题,让我解释一下我目前的设置。

我在我的 iOS 应用程序中使用 Bump-api。我在AppDelegate中有该configureBump方法,该方法在应用程序的初始启动中被调用。所以应用程序从一开始就连接到 Bump 服务器。

接下来,我有一个 NavigationController,其中按此顺序堆叠了以下 UIViewController:

ViewControllerA -> ViewControllerB -> ViewControllerC

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

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

vibrateBump是我的AppDelegate中的一种方法,我用它来关闭和开启颠簸。在这种情况下,我希望在VCA上关闭它,因为我不想转移任何东西。

但是,在VCB中,我有与 相同的代码条vibrateBump:YES,这就是我希望 Bump 工作的地方。这一切都很好,别担心我会到达那里。

现在,在AppDelegateconfigureBump中的方法中,我设置为在碰撞时从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...

}

有任何想法吗?

4

1 回答 1

1

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

myAppDelegate = [[UIApplication sharedApplication] delegate]; 

您正在创建 appdelegate 的单个实例,就像单例一样

于 2013-04-19T03:51:08.750 回答