2011-10-21 57 views
3

首先,我對此進行了深入研究,未找到任何符合要求的內容。爲什麼我的字符串不會顯示在UIAlertView中

我的問題是這樣的:我有一個在Class1中創建的字符串屬性,然後合成如下所示。

@interface Class1 : UIViewController 
{ 
    NSString *testvar; 
} 

@property (nonatomic, retain) NSString *testvar; 

@end 



@implementation Class1 

@synthesize testvar 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.testvar = @"Test variable"; 
} 
@end 

此用於限定變量/屬性的值,因爲它的工作原理在通過相同的viewDidLoad方法它是在定義顯示測試UIAlertView正常工作。當其它類,類2,使得企圖檢索時發生該問題並使用該屬性。在第二類中使用的代碼如下:

Class1 *foo = [[Class1 alloc]init]; 
UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Title" 
               message:foo.testvar 
               delegate:self 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 
[foo release]; 

什麼情況是,在顯示UIAlertView,但一直沒有消息。我相信Class1 testvar屬性的值在Class2嘗試檢索它之前被釋放,或者我設置不正確。我這樣說是因爲我嘗試了同樣的事情,但使用int而不是NSString。我將Class1的viewDidLoad中int的值設置爲3,當顯示UIAlertView時,它顯示了int的值,但顯示了「0」,即int的默認值,而不是我的設置值。

由於Objective-C相對較新,而且對內存管理還沒有很好的掌握,所以我認爲這個錯誤與我設置我的屬性值的方式或方式有關。任何洞察力將不勝感激。提前致謝。

回答

6

你做得不對。 viewDidLoad方法僅在繪製該視圖時調用,而不是在另一個類中初始化時調用。

在Class1中定義一個方法 - (id)init並移動你的self.testvar = @「Test Variable」;進去。然後它應該按預期工作。

- (id)init 
{ 
    if(self = [super init]) 
    { 
    self.testvar = @"Test Variable"; 
    } 
    return self; 
} 
+0

現在的作品完美。非常感謝。 –

0

您還沒有分配任何東西給testvar呢。在這一點上它仍然是一個零對象。

你需要去像

foo.textvar = @"my message"; 

根據您以上代碼反正。

順便說一句,你不需要在那一刻發佈警報。您可以在返回警報引用的委託方法中釋放它。

您能否粘貼完整的代碼以獲得更好的理解?

+0

該問題已解決。在完整的代碼中,我確實定義了testvar。我只用了幾天的Objective-C/Xcode,但還不習慣所有方法的工作原理。我有 - (id)初始化和 - (無效)viewDidLoad混淆起來。不過,我有興趣瞭解更多關於在代表中發佈警報的內容。就像我說的,我還不熟悉內存管理。 –

0

你可以爲此用戶全局變量。

聲明和定義它在一個類中,你可以在項目中的任何其他類中使用它。

就像你可以在ClassA中聲明一個字符串一樣,你可以在ClassB中使用它。

ClassA的:

NSString *textVar = nil; 

textVar = @"Your Message"; 

ClassB的:

extern NSString *textVar; 

UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Title 
           message:textVar  
           delegate:self 
           cancelButtonTitle:@"OK" 
           otherButtonTitles:nil]; 
           [alert show]; 
           [alert release]; 
相關問題