这是我的代码:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"location for url1 B %@", locationForURL1);
if ((alertView.tag <= 3) && (alertView.tag >= 1)) {
if (buttonIndex == 1) {
NSLog(@"location for url1 %@", locationForURL1);
在此之前,locationForURL1在其余的代码中都有一个条目,但是它在第一个NSLog处于此处。
所以我添加了nszombieenabled并得到了message sent to deallocated instance 0x508eda0
。我如何使用它来找出我的问题?我听说有人说把它放在init方法中,这让我很困惑,因为我找不到init方法。我以前从未做过这样的调试。
编辑:
我这样分配:
@interface RewriteViewController : UIViewController <MPMediaPickerControllerDelegate> {
NSString *locationForURL1;
}
@property (nonatomic,retain) NSString *locationForURL1;
我认为这与self.VARIABLE事情有关,但我永远无法弄明白我什么时候打算自我。如果我打算改用其他东西。
这是我在.m文件中对locationForURL1的所有引用:
@synthesize locationForURL1;
-(void)getWeatherLocation {
if (currentResult == 1) {
self.locationForURL1 = locationTown;
locationForURL1 = [locationForURL1 stringByAppendingString:@","];
locationForURL1 = [locationForURL1 stringByAppendingString:locationCountry];
}
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ((alertView.tag <= 3) && (alertView.tag >= 1)) {
if (buttonIndex == 1) {
NSLog(@"location for url1 %@", self.locationForURL1);
self.weatherFullURL = [self.weatherFullURL stringByAppendingString:self.locationForURL1];
}
}
}
-(void)dealloc {
[locationForURL1 release];
[super dealloc];
}
答案 0 :(得分:3)
self.locationForURL1 = locationTown;
locationForURL1 = [locationForURL1 stringByAppendingString:@","];
locationForURL1 = [locationForURL1 stringByAppendingString:locationCountry];
您使用locationTown
保留self.locationForURL1
,然后立即使用两个自动释放的对象覆盖该作业。所以,你正在泄漏一个对象,然后当自动释放池获得stringByAppendingString:
的结果时发生崩溃。
答案 1 :(得分:1)
答案 2 :(得分:1)
您不能在创建它的地方保留locationForURL1。我建议将它作为属性添加到你的班级:
@interface YourClass : UIViewController {
NSString *locationForURL1;
}
@property (nonatomic, copy) NSString *locationForURL1;
然后在你的viewDidLoad中(或者你创建该字符串的地方),执行以下操作:
NSString *location = [[NSString alloc] initWith....];
self.locationForURL1 = location;
[location release];
然后在你的-alertView:clickedButtonAtIndex:方法中,只需将其称为self.locationForURL1,你应该没问题。