将double值编号从另一个viewController传递给NSNumber

时间:2014-03-24 00:37:30

标签: ios nsnumber

我在尝试将双值数字传递给另一个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]

总是得到错误。

2 个答案:

答案 0 :(得分:1)

由于detailViewController.latNSNumber,您需要为其分配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;

并查看是否有帮助