2011-01-30 6 views
2

私は当初、UIAlertViewに文字列値を取得することについての質問をhereに依頼しましたが、今はそれを取り除く必要があります。だから私はすべてを整理し、それをよりきれいにし、より明確にする新しい質問としてこれを入れました。UIAlertViewレスポンス内のNSStringの値を設定することはできません。

@synthesize myTestString

それがで合成しています.Mファイルに続いて... .hファイルで

@property (nonatomic, retain) NSString *myTestString;

は、だからここに私が持っているコードです.mファイルに...

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    if (buttonIndex == 0) { 
    self.myTestString = @"test"; 
    } 
} 

-(void)somethingElse { 

    NSLog(@"%@", myTestString); 
} 

私はdeallocでそれをリリースしたいと思います。

このコードは、NSLogのポイントでクラッシュする可能性があります。

どうすればこの問題を防ぐことができますか?

答えて

4

ここで@synchronizeの使用についてはわかりません。プロパティは通常、@synthesize propertyName;を使用して.mファイルにと合成されます。 @synchronizeは、マルチスレッドアプリケーションのスレッドの安全性のために使用されます。私はここで見ることができます

他の事はあなたが唯一のプロパティbuttonIndex == 0に値を割り当てるためmyTestStringがあなたの-somethingElse方法で未定義することができるということです。 -initメソッドまたはalertView:clickedButtonAtIndex:メソッドのいずれかで、myTestStringの既定値を挿入することができます。

MyClass.h

@interface MyClass { 
    NSString *myTestString; 
} 
@property (nonatomic, retain) NSString *myTestString; 
@end 

MyClass.m

:私はあなたのクラスは、このような何かを見て期待し、要約する

@implementation MyClass 

@synthesize myTestString; 

-(id)init { 
    if ((self = [super init]) == nil) { return nil; } 
    myTestString = @""; 
    return self; 
} 

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

-(void)alertView:(UIAlertView *)alertView 
clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) { 
     self.myTestString = @"test"; 
    } 
} 

-(void)somethingElse { 
    NSLog(@"%@", myTestString); 
} 

@end 
+0

ええと、これはセットアップしたテストプロジェクトでは動作しますが、実際のプロジェクトでは動作しません。ああ、私は合成を意味し、同期しなかった。 – Andrew

+0

クラッシュログにヒントはありますか? Xcodeでデバッガを有効にして実行すると、障害点のスタックトレースが表示されます –

+0

私はちょうど問題と思われるclickedButtonAtIndexの最初の言及でself.myTestStringを持っていました。あなたの助けを借りて、今修正されました。 – Andrew

関連する問題