2010-07-10 91 views
0

我是新來的目標c,我想它與我不理解指針或什麼,但我不能訪問一個變量之外的類聲明。如何從外部類訪問屬於一個類的變量?

我知道這是一個荒謬的問題,但我需要幫助。

我有一個簡單的NSString,它取決於選擇哪個表格行,它抓住名稱並將其存儲在字符串中。事情是,我需要這個字符串在另一個需要使用String值加載文件的類中。我只是得到一個字符串是零或無任何錯誤。

我已經嘗試過屬性,綜合,導入,@class,但我想我不知道這些東西的真正含義是什麼。

請指點我正確的方向。


在libraryTableViewController我在.M申報

NSString *fileToLoad; 
@property (nonatomic, retain) NSString *fileToLoad; 

@synthesize fileToLoad;然後在didSelectRowAtIndexPath方法我fileToLoad = @"%@", [categories objectAtIndex:row];

的問題是在另一個視圖控制器類我想從tableViewData plist中加載

NSString *myFile = [[NSBundle mainBundle] pathForResource:fileToLoad ofType:@"plist"]; 

但只是得到零; ?

+3

下一次更新你的問題,評論中的代碼只是不可讀的;) – 2010-07-10 08:04:04

回答

4

如果代碼是在另一個類或實例,你沒有其他類別的類似命名的屬性魔法訪問/ instances - 有關declared properties的文檔可能有助於消除誤解。
在你的第二個例子中,fileToLoad可能是nil,因爲它從未在那裏初始化。

你需要有你想擁有的價值和檢索屬性值的實例的引用:

NSString *myFileToLoad = myTableViewController.fileToLoad; 

根據您的架構有可能還存在其他/更好的解決方案。

+0

如果我在類中聲明瞭一個myTableViewController,然後嘗試在另一箇中使用它,我只會得到相同的錯誤。 – jarryd 2010-07-10 13:11:15

+0

@alj:你首先必須給它賦值當然。 – 2010-07-10 14:04:18

+0

Nah,我的意思是,我得到myViewController的未聲明錯誤,就像我對myFileToLoad所做的那樣。 – jarryd 2010-07-10 14:14:55

1

只是一對夫婦對你的代碼點:

  1. 你宣佈一個NSString變量來使用retain內存管理特性。具有可變/不可變類型的類簇的正確內存管理模型是copy
  2. 即使您已聲明fileToLoad作爲屬性,您仍將其直接設置爲didSelectRowAtIndex方法,該方法繞過內存管理和任何KVO/KVC通知可能會改變屬性。除了初始化或拆除方法外,您應該使用self.fileToLoad更改屬性值。
+0

謝謝。但請,我瘋了。你將如何獲取選定的tablecell.text,並在另一個類中使用該文本來加載具有該名稱的plist?我仍然無法工作。 – jarryd 2010-07-10 13:30:05

相關問題