1

このエラーが発生します:

exc_bad_access (code=1, address=0x2012 

この方法でシングルトンから値を受け取ろうとすると、次のようになります。

Draggable* sharedSingleton = [Draggable sharedManagerDraggable];
NSLog(@"%@", sharedSingleton.namePassedToDraggable);

上記のコードは、タイプUIImageViewのDraggable.mに配置されています。

+ (Draggable *)sharedManagerDraggable
{
static Draggable *sharedManagerDraggable = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    sharedManagerDraggable = [[Draggable alloc] init];
});
return sharedManagerDraggable;
}

この方法でnamePassedToDraggableに値を割り当てます(view controller.mから):

#import Draggable.h

Draggable* sharedSingleton = [Draggable sharedManagerDraggable];
    sharedSingleton.namePassedToDraggable = txt.text;
        NSLog(@"%@", sharedSingleton.namePassedToDraggable);
    dragger.tag = img.tag;

そしてDraggable.hで私は持っています:

+ (Draggable *) sharedManagerDraggable;

@property (nonatomic, assign) NSString* namePassedToDraggable;

アプリがクラッシュする原因となるエラーが発生するのはなぜですか?私は他のviewcontorllersでも同じ方法を使用していますが、問題なく動作します。

4

1 に答える 1

11
@property (nonatomic, assign) NSString* namePassedToDraggable;

する必要があります

@property (nonatomic, strong) NSString* namePassedToDraggable;

プロパティが保持されていない場合、プロパティはstrong保持されず、割り当てている関数のスコープの最後で解放されます。

于 2012-12-14T19:37:02.710 に答える