2011-12-20 43 views
0

我有2個課程。在我的第一堂課,我有一個標籤。現在我必須從我的第二課給那個標籤提供意見。 這是我的代碼。我怎麼能給iPhone中的UILabel輸入

IBOutlet UILabel *label1; 

@property(nonatomic, retain) IBOutlet UILabel *label1; 

@synthesize label1; 

我這樣稱呼這個標籤。 我導入我的class1並創建對象,如classone。 我檢查了(NSLog打印)類,該方法將被調用,但輸入不會come.i檢查該標籤,它也連接到我的班。因爲我給我的viewDidLoad相同的輸入時間,其工作正常。

NSString *ram= @":13123123312"; 
     classone.label1.text= ram; 

指導我在哪裏做錯了。

+0

是classone裝? – 2011-12-20 12:40:31

+0

@Adil Soomro no我從我的課程二加載這個值。 – 2011-12-20 12:45:24

回答

1

先前視圖的設置值比這更復雜。操作系統在內存壓力下被刪除了什麼?

設置這些值的正確方法是使用在整個Cocoa框架中使用的MVC模式。你的第二個視圖控制器設置了前一個視圖控制器的屬性。當前一個視圖需要顯示時,它將從該屬性獲取其值。

正確掛接視圖控制器以通話回棧中另一個視圖控制器的通常方法是使用委託協議。

前面我寫了一個例子DelegationExample,它顯示瞭如何使用委託協議在第一個視圖中的文本字段的值由第二個視圖控制器中的文本字段的值填充。你可能會發現看看我是如何做這個例子的。

更新

我已經更新了鏈接到一個新的項目iOS6的與ARC和故事

+0

你的例子非常有用謝謝你..... – 2011-12-21 03:53:31

0

在AppDelegate類中取一個NSString變量並正確合成它。而第二類的變量的值存儲到像:

appDelegate.strLbl = [NSString stringWithformat:@"%@",strVal]; 

,然後該值複製到標籤中的第一類,如:

lblVal.text = [NSString stringWithformat:@"%@",appDelegate.strLbl]; 

希望幫助你。謝謝。

+0

+1 - 對於好的答案.. – 2011-12-20 12:31:41

+0

其實它不是那麼好。它違反了OOP,使用AppDelegate作爲一個普通的存儲類是一個初學者的錯誤。 – Abizern 2011-12-20 12:51:13

+0

你能指導我如何違反OOP? – Sarah 2011-12-20 12:56:37

0

其實你應該有第二堂課第一堂課的參考。你不應該分配一個新的實例。如果您創建新實例,那麼您爲其設置標籤值的實例與您在點擊時看到的實例不同。

我想你明白了。

-1

Aadhira是正確的,當u在Class2中創建的Class1的新實例的錯, 你已經拿到Class 1的原始實例,這可以通過創建返回的Class1的當前實例的靜態函數來實現,如下圖所示

static classone* sInstance; 

@implementation classone 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization. 
    } 
    sInstance = self; 
    return self; 
} 

+(classone*) getInstance { 
    // NSAssert (sInstance!=nil, @"classone:getInstance: called when singleton was not initialized!"); 
    return sInstance; 
} 
+0

跳過你不需要的箍環,當你不需要時創建一個單例... – Abizern 2011-12-20 14:34:02

+0

@Abizern謝謝你讓我清楚它 – Nakkeeran 2011-12-20 16:34:06