如何在objective-c ipad应用程序中调试和修复崩溃

时间:2013-02-19 15:13:05

标签: objective-c ios6

我有一个地图视图,它实例化一个表示模型,用于在我的应用程序中运行它的所有逻辑。我有一个列表组件。用户选择他们想要在地图上看到的一些数据。这将被发送到我的模型,一旦在视图上调用更新,我将NSObject传递给Map视图,然后将这些数据传递给PM,以便在视图上运行逻辑。

这是我的地图视图代码。最后一行是事情崩溃的地方“[pm showMKL:d];”被叫。如果我注释掉这一行,事情会顺利进行。

这是一款iOS 6应用程序,因此正在使用ARC。一些搜索建议内存泄漏,但运行分析器似乎没有暗示。如果我运行带有分析的应用程序,我也无法产生崩溃。

#import "MapView.h"

@implementation MapView

-(id)initWithModel:(MainDM*)dm:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        _dm = dm;
        [_dm register:self];
        pm = [[MapPM alloc] initWithModel:_dm];

        CLLocationCoordinate2D coord = {.latitude =  32.61724, .longitude =  -106.74128};
        MKCoordinateSpan span = {.latitudeDelta =  1, .longitudeDelta =  1};
        MKCoordinateRegion region = {coord, span};

        [self setRegion:region];
    }
    return self;
}

-(void)update:(DataObject*)data
{
    if([[data getType] isEqualToString:@"CURRENT_KML_CHANGE"])
    {
        KmlVO *d = (KmlVO*)[data getData];
        [pm showMKL:d];
    }
}

@end

这是MapView的.h

#import <MapKit/MapKit.h>
#import "MainDM.h"
#import "BBView.h"
#import "MapPM.h"
@interface MapView : MKMapView <BBView>


@property(nonatomic,strong)MainDM *dm;
@property(nonatomic,strong)MapPM *pm;

-(void)update:(DataObject*)data;
-(id)initWithModel:(MainDM*)dm:(CGRect)frame;
@end

这是MapPM代码。

#import "MapPM.h"
@implementation MapPM

-(id)initWithModel:(MainDM *)dm
{
    self = [super init];

    if(self)
    {
        _baseMaps = [[NSMutableArray alloc] init];
        _dm = dm;
    }
}
-(void)showMKL:(KmlVO*)vo
{

    if([_baseMaps containsObject:vo])
    {
        NSLog(@"not added");
    }
    else
    {
        NSLog(@"added kml");
        [_baseMaps addObject:vo];
    }
}
@end

这是PM的.h

#import <Foundation/Foundation.h>
#import "MainDM.h"
#import "KmlVO.h"
@interface MapPM : NSObject

@property(nonatomic, retain)NSMutableArray * baseMaps;
@property(nonatomic, retain)MainDM *dm;
-(id)initWithModel:(MainDM *)dm;
-(void)showMKL:(KmlVO*)vo;

@end

1 个答案:

答案 0 :(得分:1)

毕竟我不需要查看你的头文件。

-(id)initWithModel:(MainDM *)dm
{
    self = [super init];

    if(self)
    {
        _baseMaps = [[NSMutableArray alloc] init];
        _dm = dm;
    }
}

你没有回归自我,因此,你在未定义的对象上执行showMKL。你检查了警告吗?

另外,你正在使用属性(不是你让我们相信的@interface中的实例变量)。因此,[pm showMKL:data]应该是[self.pm showMKL:data]