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

如何调试和修复objective-c ipad应用程序中的崩溃,objective-c,ios6,Objective C,Ios6,我有一个映射视图,它实例化了一个表示模型,用于运行应用程序中的所有逻辑。我有一个列表组件。用户选择一些他们想在地图上看到的数据。这会被发送到我的模型,一旦在视图上调用了更新,我会将一个NSObject传递给Map视图,然后希望将该数据传递给PM,以便在视图上运行逻辑 这是我的地图视图代码。最后一行是东西崩溃的地方,“[pm showMKL:d];”被调用。如果我把这句话注释掉,事情就会顺利进行 这是一个iOS 6应用程序,因此正在使用ARC。一些搜索提示内存泄漏,但运行探查器似乎没有提示这一点。

我有一个映射视图,它实例化了一个表示模型,用于运行应用程序中的所有逻辑。我有一个列表组件。用户选择一些他们想在地图上看到的数据。这会被发送到我的模型,一旦在视图上调用了更新,我会将一个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
这是下午的.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
#导入
#导入“MainDM.h”
#导入“KmlVO.h”
@接口MapPM:NSObject
@属性(非原子,保留)NSMutableArray*基映射;
@属性(非原子,保留)MainDM*dm;
-(id)initWithModel:(MainDM*)dm;
-(无效)showMKL:(KmlVO*)vo;
@结束

我根本不需要看你的头文件

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

    if(self)
    {
        _baseMaps = [[NSMutableArray alloc] init];
        _dm = dm;
    }
}
您没有返回self,因此,您正在未定义的对象上执行showMKL。你检查过你的警告了吗


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

如何/在哪里存储
pm
呢?在MapView.h文件的@interface{MapPM*pm;}blockum中,很有趣。难说;发布这两个文件的头文件肯定会有帮助。我已经更新了上面的代码以包含.h文件。是的。。。我所做的是在MapPM initWithModel函数中添加“return self”,并在MapView中保持代码不变。
-(id)initWithModel:(MainDM *)dm
{
    self = [super init];

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