我在尝试将双值数字传递给另一个viewController时遇到问题。
这是接收viewController的NSNumber声明:
@property (nonatomic, assign) NSNumber *lat;
这就是我如何从源viewController获取值:
double lat1 = [[[categorias objectAtIndex:i]objectForKey:@"latitud"] doubleValue];
double lon1 = [[[categorias objectAtIndex:i]objectForKey:@"longitud"] doubleValue];
annotation3.lat = [NSNumber numberWithDouble:lat1];
annotation3.lon = [NSNumber numberWithDouble:lon1];
NSLog(@"ANNOTATION LAT %@",annotation3.lat);//Log OK
NSLog(@"ANNOTAION LON %@",annotation3.lon);//Log OK
然后在另一个方法中,我尝试将值lat传递给另一个viewController:
myAnnotation *ann = (myAnnotation *)view.annotation;
detailViewController.lat = ann.lat;
我应该如何格式化'ann.lat'?我试过了
ann.lat
[ann.lat doubleValue]
[NSNumber numberWithDouble:ann.lat]
总是得到错误。
答案 0 :(得分:1)
由于detailViewController.lat
是NSNumber
,您需要为其分配NSNumber
。由于在源视图控制器中它是相同的,所以您需要做的只是一个简单的赋值,就像您在示例中所做的那样:
detailViewController.lat = ann.lat;
在这些情况下,其他两个选项会很有用:
double
且源视图控制器具有NSNumber
,则使用[ann.lat doubleValue]
NSNumber
且源视图控制器具有double
,则使用[NSNumber numberWithDouble:ann.lat]
记录此NSLog(@“ANN.LAT VALUE =%@”,ann.lat);应用程序在此行崩溃
这意味着ann.lat
不 NSNumber
,因此上述第二种情况适用。
答案 1 :(得分:1)
当您在注释类中将属性声明为(assign)
时,我假设其初始值是从该类中的方法中的局部变量赋值的,一旦您的detailViewController尝试到访问已释放的属性,因为将值赋给属性不会增加对象的引用计数。这将导致访问冲突异常。将注释中的属性定义更改为
@property (strong,nonatomic) NSNumber *lat;
并查看是否有帮助