我会尽量让自己变得清晰。让我们从头开始。我有一个带有tableview的应用程序,其中包含一个距myLocation有距离的地方列表。现在,每当我在gps位置获得更新时,我都会运行以下代码
- (void)locationUpdate:(CLLocation *)location {
myLocation = location;
for (Trek * trek in list) {
CLLocation *loc = [[CLLocation alloc] initWithLatitude:[trek latitude_start] longitude:[trek longitude_start]];
double dis = [locationManager getDistance: loc];
[trek setDistance:dis];
[trek setDistanceUnit];
[loc release];
}
[self.tableView reloadData];
}
现在这段代码[trek setDistanceUnit];
调用
-(void) setDistanceUnit {
if (self.distance < 1000.0)
self.distanceString = [NSString stringWithFormat:@"%.0lf m", self.distance];
}
现在,如果我只使用distanceString
应用程序崩溃。现在我认为这可能与这些更新可能同时(并行)运行视图绘制单元格所需的访问这一事实有关。任何人有任何想法?我可以发布更多代码,如果有用,我只是不想过多发布这篇文章太久了。
我试图到处搜寻,但到目前为止我找不到任何东西。
提前致谢, 翁
PS现在应用程序正在运行,但我想了解发生了什么。
答案 0 :(得分:5)
如果您的distanceString
是保留属性,则在没有self
的情况下进行分配会将其设置为崩溃,因为您绕过了setter,并在不保留字符串的情况下分配字符串。因此,当字符串在发送到自动释放池时被解除分配时,您的应用程序崩溃。
通过使用@synthesize
并使用点符号(或setDistanceString:
)合成访问器,对象将为您保留字符串,以便它始终具有指向它的指针(直到它被释放) )。