2011-01-30 58 views
2

我最初問一個問題here關於獲取字符串值到UIAlertView,但現在我需要把它弄出來。所以我把這個作爲一個新問題來整理一切,使它更清晰和更清晰。在UIAlertView響應中設置NSString的值,不能在其他地方使用?

因此,這裏是我的代碼:

在.h文件..

@property (nonatomic, retain) NSString *myTestString;

然後在.m文件它與合成:

@synthesize myTestString

然後在.m文件中...

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

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

-(void)somethingElse { 

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

然後我會釋放它在dealloc。

此代碼會導致在NSLog點崩潰。

我該如何預防?

回答

4

我不確定您在這裏使用@synchronize。屬性通常是合成在.m文件中,使用@synthesize propertyName;@synchronize用於多線程應用程序中的線程安全。

我在這裏可以看到的另一件事是,myTestString可以在您的-somethingElse方法中未定義,因爲您只在buttonIndex == 0時爲屬性賦值。您可能需要在-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 2011-01-30 21:34:11

相關問題