1

これはかなり基本的なことですが、理解できません。
基本的なモデル クラスがあります (簡単にするために、いくつかのプロパティだけを残します)。

@interface Marker : NSObject {
    NSInteger book_id;
    NSString *detail;
    NSNumber *lat;   
}

@property (nonatomic, assign) NSInteger book_id;
@property (nonatomic, retain) NSNumber *lat;
@property (nonatomic, retain) NSString *detail;

@end

@synthesize book_id, detail, lat;

- (id)init
{
    self = [super init];
    if (self) {
        detail = [NSString alloc];
        lat = [NSNumber alloc];
    }

    return self;
}

- (void) dealloc {
    [detail release];
    [lat release];
    [super dealloc];
}

@end

そして、単純なメソッドを持つシングルトンを持っています。このクラスのインスタンスをそのシングルトン配列にプッシュしたいのですが、このようにしました

#import "Marker.h"

@interface MarkersSingleton : NSObject {
    NSMutableArray *markers;
}

+ (MarkersSingleton *)getInstance;
- (void)addMarker: (Marker *) marker;

@property (nonatomic, retain) NSMutableArray *markers;

@end

#import "MarkersSingleton.h"

@implementation MarkersSingleton

@synthesize markers;

- (id) init{
    self = [super init];

    if(self){
        markers = [[NSMutableArray alloc] init];
    }

    return self;
}

+ (MarkersSingleton *) getInstance {
    static dispatch_once_t pred;
    static MarkersSingleton *inst;
    dispatch_once(&pred, ^{
        inst = [[MarkersSingleton alloc] init];
    });

    return inst;
}

- (void) addMaker: (Marker *) marker {
    [markers insertObject:marker atIndex:[markers count]];
}

- (void) dealloc {
    [markers release];
    [super dealloc];
}

@end

そして今、私が試してみると

Marker *marker = [[Marker alloc] init];

...いくつかのセット...

[[MarkersSingleton getInstance] addMarker:marker];

「プログラム受信信号:SIGABRT」が表示されます。[マーカーのコピー] も試しましたが、クラスのコピーの実装が不足していると思います。コピーを実装してから addMarker を使用する前にマーカーをコピーする必要がありますか、それとも他に良い方法がありますか?
ありがとう。

4

1 に答える 1

0

上記のコメントスレッドで変数を適切に初期化していない点に加えて、1つの推測では、表示したコードで、メソッドのつづりを。と間違えていると考えaddMarker:られaddMaker:ます。

于 2011-10-06T01:16:47.050 に答える