1

(コード更新) IOS 7 の更新後、私のアプリはシングルトン ラベルでクラッシュします (これはデバイスでのみ発生しました)...最初にシングルトンにアクセスするときはすべて問題ありませんが、2 回目は ClassSingleton が nil です。誰でも助けることができますか?(IOS 7 より前はすべて問題ありませんでした...今は Bad Access Code =1 を取得します)

ARCを使用しています...

ありがとう

ClassSingleton.h

@property (nonatomic, strong) IBOutlet UILabel *lblResultado;

ClassSingleton.m

@synthesize lblResultado;


__strong static ClassSingleton *pOutClassSingletonReturn = nil;



#pragma mark Singleton Methods


+ (void)initialize
{
        pOutClassSingletonReturn = [[super allocWithZone:NULL] init];

        pOutClassSingletonReturn.lblResultado = [[UILabel alloc] init];
        pOutClassSingletonReturn.lblResultado.backgroundColor = [UIColor clearColor];
        pOutClassSingletonReturn.lblResultado.textColor = [UIColor whiteColor];
        pOutClassSingletonReturn.lblResultado.textAlignment = NSTextAlignmentRight;

        pOutClassSingletonReturn.lblResultado.text = @"0";
}



+ (ClassSingleton*) pOutClassSingletonReturn
{
    return pOutClassSingletonReturn;
}

@end

AccessClass.m

@implementation AccessClass

__strong static ClassSingleton *pOutClassSingletonReturn;



- (void)viewDidLoad
{
    [super viewDidLoad];

    externalsObjects = [NSDictionary dictionaryWithObject:[ClassSingleton  pOutClassSingletonReturn] forKey:@"pOutClassSingletonReturn"];


    nibOptions = [NSDictionary dictionaryWithObject:externalsObjects forKey:UINibExternalObjects];

    [self.nibBundle loadNibNamed:self.nibName owner:self options:nibOptions];

    pOutClassSingletonReturn = [ClassSingleton pOutClassSingletonReturn];

    pOutClassSingletonReturn.lblResultado.text = @"1";
}


- (IBAction) button: (id) sender

{
     pOutClassSingletonReturn.lblResultado.text = @"blabla";  //==>>> Crash second time i press the button
}
4

5 に答える 5

0

あなたがpOutClassSingletonReturnAccessClass.m で宣言した場所がわからないので、それがグローバル変数なのか、インスタンス変数なのpOutClassSingletonReturnか、ClassSingleton.m 内の への参照なのか、それとも何なのかを判断するのは困難です。pOutClassSingletonReturnしかし、ClassSingleton.m の問題はAccessClass.mの問題ほど大きくないと思います。それが強い参照であることを確認するか、少なくとも のビュー階層に追加してください-viewDidLoad

于 2013-09-20T21:13:21.657 に答える
0

+ (void)initialize代わりに静的メソッドを使用してシングルトンを初期化してみてください。

参照:私の Objective-C シングルトンはどのように見えるべきですか?

于 2013-09-19T23:38:22.920 に答える
-1

ARC を使用している場合は、次のように static を strong として宣言してみてください。

__strong static ClassSingleton *pOutClassSingletonReturn = nil;

ARCがあなたのためにそれを保持することを知っているように.

于 2013-09-20T19:39:22.330 に答える