2011-08-28 114 views
-2

我是面向對象編程的新手,我有兩個視圖控制器。 a和b。在A中,我有一個名爲gradeLabel的標籤。我想打它,所以我可以顯示視圖控制器B.文本,所以我把這個:面向對象編程(HOW!)

-(NSString *)grade { 
    return [gradeLabel text]; 
} 

這是視圖控制器B

#import "InfoInput.h" 
@implementation illRememberViewController 
    -(IBAction)previewTheInfo { 
     InfoInput *info = [[InfoInput alloc] init]; 
     gradeText.text = info.grade; 
    } 

,但該標籤沒有文本/顯示無文本。我怎樣才能解決這個問題。我是否正確使用面向對象的編程?

+0

您可能希望修改您的標題/文本,因爲您的問題是Objective-C,而不是面向對象編程。 – johnluetke

+0

另外,「定位」不是一個字。 (我聽說英國人試圖在世界上強加它,但他們錯了。) – Malvolio

回答

0

你有一個A類的對象嗎?你需要以某種方式引用它。例如:

A* a = [[A alloc] init]; 
gradeText.text=a.grade; 

但它聽起來像你的第一類是acutually視圖控制器。在那種情況下,你根本不會在那裏存儲任何信息。你通常會引入一個叫做模型的thrid類,並且只是要求你給出評分。請閱讀MVC模式。
[編輯] 我會把你的UIApplicationDelegeate中的一個屬性中的成績信息存儲起來,並從那裏讀取 - 對你來說,這比你現在正在做的事更容易。 UIViewController不是普通的對象。通常情況下,一個對象表示一個特定的事物(比如TestResult類型的對象TestFForStudentA),可以這樣使用。但是,UIViewController鏈接到它們控制的UI(因此它們的名稱)並在使用UI時保持活動狀態 - 但很難跟蹤您何時切換視圖等。

因此,我建議:
YourAppDelegate.h:

@property (retain) NSString* grade 

YourAppDelegate。L:

@synthesize grade; 

視圖控制器A,一旦我們離開視圖

- (void) viewWillDisapper { 
    YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    appDelegate.grade = gradeLabel.text; 
} 

保存級到應用程序委託的價值最後,您可以顯示在視圖控制器B中的等級:

-(IBAction)previewTheInfo { 
    YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    gradeText.text = appDelegate.grade; 
} 

請注意,這只是給你第一個想法。你真正想要的,什麼是圍繞創建一個存儲級的對象,並攜帶該對象的視圖控制器之間

+0

我做了它仍然不起作用 – user894725

+0

我的課都是視圖控制器 – user894725

+0

我該如何解決這個問題 – user894725

3

首先,您需要了解面向對象的編程。

一旦你這樣做了,那麼答案就是「你需要實例化或獲取封裝了grade的類的現有實例並請求其爲grade」。

而此行的代碼將工作:

gradeText.text = thingThatHoldsTheGrade.grade; 

沒有人小氣;簡潔,也許,但不是故意的意思。我們已經看到了這個問題 - 而且非常相似 - 很多次。最終歸結爲缺乏系統組裝方式的知識,以及您的應用如何與系統提供的基礎設施集成。

如果您試圖建造一輛汽車,您的第一個問題是「我如何將電線連接到火花塞?」不會。這將是「汽車基本上是如何工作的,各個子系統是什麼以及它們如何相互作用?」然後,「如果我想製作一輛定製汽車,我該如何修改'基本汽車'模板成爲我想要的?」

Object Oriented Programming With Objective-C是好的,但不是一個真正的基本教程,像一個指南。

iOS Application Programming Guide也很好。

+0

是行不通由於某種原因,它不給標籤是什麼?你嘗試任何文本 – user894725

+0

?編輯您的問題併發布更多代碼。 – bbum

+0

我試過這個gradeText.text = b.grade; – user894725

1

當你做到這一點

InfoInput *info = [[InfoInput alloc] init]; 

你正在一個全新的實例,即不是同樣的例子,你在gradeLabel上放置了一些文本。

假設你可能已經從ControllerA推下面的代碼controllerB應該選擇ControllerA的正確實例。

gradeText.text = [((InfoInput*)self.parentViewController) grade]; 

無需通過[InfoInput alloc] init]創建新實例,請刪除此行。

+0

那麼我該怎麼做? – user894725

+2

你應該怎麼做?學習面向對象的編程。 – bbum

+0

請幫助我,而不是傲慢 – user894725