アプリケーションですべてのロジックを実行するためのプレゼンテーションモデルをインスタンス化するマップビューがあります。リストコンポーネントがあります。ユーザーは、地図上に表示したいデータをいくつか選択します。これはモデルに送信され、ビューで更新が呼び出されたら、NSObjectをマップビューに渡し、ビューでロジックを実行するためにこのデータをPMに渡します。
これがマップビューの私のコードです。最後の行は、物事がクラッシュする場所です "[pm showMKL:d];" 呼び出されます。この行をコメントアウトすると、物事はスムーズに進みます。
これはiOS6アプリであるため、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