试图找出我的应用程序崩溃的原因?

时间:2011-02-05 02:36:59

标签: iphone objective-c cocoa-touch debugging

这是我的代码:

-(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];

}

3 个答案:

答案 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,你应该没问题。