新的 iOS 人员来了。我有一个问题,谷歌搜索和搜索这里没有任何线索。我假设这是基本的。我有一个简单的应用程序(应用程序委托(delegate)和 1 个 View Controller ),作为其中的一部分,我使用本地通知。因此,在应用程序委托(delegate)中,我使用“didReceiveLocalNotification”来监视通知。然后,根据进入的实例方法,我调用主视图 Controller 中的几个实例方法之一。
即在AppDelegate.m中
- (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification {
MyViewController* controller = [[MyViewController alloc] autorelease];
if ([[notification.userInfo objectForKey:@"id"] isEqualToString:@"myKey"]) {
[controller checkActive];
}
}
通过记录和观察一些断点,这一切都有效。如果应用程序在后台,则会收到通知,应用程序将打开,并调用正确的实例方法。
我根本无法弄清楚为什么实例方法的某些部分只是被传递,而没有任何效果。举个简单的例子,如果我们有这个:
-(void)checkActive {
ViewThing.alpha = 1.0;
NSLog(@"checkActive ran");
}
日志语句将正常显示,但 ViewThing 不会改变。在主视图 Controller 的其他地方,我毫无问题地调用相同的 checkActive 方法,并且它更改了 ViewThing。 (在这种情况下通过另一个界面按钮 IBAction 方法)。
没有错误,没有警告,控制台没有显示任何内容,在 ViewThing 上放置断点表明它命中了线路。我很困惑,看不出尝试从委托(delegate)调用方法与在 IBAction 上调用方法有什么不同。
感谢您的任何提示!
最佳答案
如果 alpha
未正确更改,则可能存在一些问题,其中 1 和 2 最有可能出现。
ViewThing
为nil
。原因可能是 View 已卸载并且您将其设置为 nil 或在设置导出之前调用了 checkActive。ViewThing.alpha
正在非主线程的线程上设置。尝试在单独的线程上更改 UI 元素将导致未定义的行为,例如从不更新更改或花费较长时间来更新更改。您可以使用[NSThread isMainThread]
检查它是否是主线程。ViewThing
指向不同的 View 。
1和2可以通过日志 View 轻松检查
NSLog(@"checkActive ran %@", ViewThing);
关于iphone - Xcode4,iOS : Certain parts of instance method being ignored, 没有错误,刚刚过去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850042/