我一直在疯狂地试图弄清楚这一点,并且根据我的知识尝试了一切。我希望有人能解决这个问题,让我解释一下我目前的设置。
我在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...
}
有什么想法吗?
答案 0 :(得分:1)
当你从appdelegate调用mymethod时,你正在创建一个不同的VCB控制器实例,但是在
的情况下myAppDelegate = [[UIApplication sharedApplication] delegate];
您正在创建appdelegate的单个实例,如单身