2

我正在尝试在用户接受位置共享后显示视图。这是代码:

-(void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusDenied) {
        NSLog(@"Denied");
    }
    else if (status == kCLAuthorizationStatusAuthorized) {
        NSLog(@"Accepted!");
        AlertViewController *aViewController = [[AlertViewController alloc] initWithNibName:@"AlertViewController" bundle:nil];
        aViewController.view.frame = CGRectMake(0, 0, 320, 460);
        aViewController.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate.window addSubview:[aViewController view]];
    }
}

但是我*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xee6fc90'在线上遇到错误aViewController.view.frame = ...

我放了断点并验证了aViewController它不在语句0x00000之后。alloc我似乎无法弄清楚问题是什么。请提出解决方案。

4

3 回答 3

3

我怀疑 xib 文件或 AlertViewController 的视图初始化例程(即 viewDidLoad 或 loadView)中存在问题。我可以推断设置框架的行崩溃的唯一方法是这是您第一次访问视图属性,并且视图是延迟加载的。

我怀疑如果你更换

aViewController.view.frame = CGRectMake(0, 0, 320, 460);

UIView *aVCView = aViewController.view;
aVCView.frame = CGRectMake(0, 0, 320, 460);

那么你会在第一行看到崩溃,而不是第二行。

为了进一步调试,我会在 AlertViewController 的 viewDidLoad 或类似中使用中断。并仔细检查 xib 中的所有内容。

于 2012-06-15T04:44:09.587 回答
2
于 2012-06-15T04:36:36.723 回答
0

在您的条件语句中,类型是status什么?您可能使用了错误的运算符或方法。例如,如果statusintbool或 a float,您将使用==. 如果它是一个字符串,你会使用isEqualToString,如果它是一个通用对象,你可以简单地使用isEqual:。该功能还有专门的版本,isEqual:例如isEqualToArray.

希望这可以帮助!

于 2012-06-15T00:06:35.223 回答