2012-12-27 60 views
1

OK,這是真的竊聽我,我相信解決辦法很簡單......我無法從其他類(SeverConnect.m),我已經宣佈,在我的ViewController的.H正常合成設置我的ViewController的屬性變量/.m文件:如何從另一個類訪問我的ViewController的屬性變量?

ServerConnect.h:

#import <Foundation/Foundation.h> 
#import "ViewController.h" 
#import "Contact.h" 

@class ViewController; 

@interface ServerConnect : NSObject 
{ 
Contact *newContact; 
NSString *codeRawContent; 
NSMutableArray *contactListCopy; 
... //Other variables declared here, but not shown in order to save space 

內ServerConnect.m:

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
NSLog(@"parserDidFinish"); 

newContact = [[Contact alloc] initWithCodeInfo:(NSString *)codeInfo 
             contactName:(NSString *)completeName 
             contactImage:(UIImage *)profileImage 
            contactWebSite:(NSString *)codeRawContent]; 
[contactListCopy insertObject:newContact atIndex:0]; 
[ViewController setContactList:contactListCopy]; //Automatic Reference Counting Error Occurs Here: "No known class method for selector 'setContactList:'" 
} 

正如我上面提到的,我已經宣佈和合成的屬性變量,「contactList」,在我的ViewController的.H/.m文件(沒有錯誤):

@property (nonatomic, retain) NSMutableArray *contactList; //In ViewController's .h file 
@synthesize contactList; //In ViewController's .m file 

有人能告訴我什麼,我做錯了?預先感謝您提供的任何幫助!

回答

1

你想在一個類訪問實例屬性:

[ViewController setContactList:contactListCopy]; 

,你需要首先創建視圖控制器類的實例,然後設置其屬性。類似這樣的:

ViewController *viewController = [[ViewController alloc] init]; 
[viewController setContactList:contactListCopy]; 
+0

感謝埃德溫對快速響應的方式!我從我的AppDelegate創建視圖控制器類的實例時,應用程序首先加載( 「... didFinishLaunchingWithOptions ... 」): 的viewController = [[視圖控制器的alloc] initWithNibName:@「 ViewController_iPhone」 捆綁:無]。 通過創建另一個實例,我不會丟失保存在前一個viewController實例(即其他實例變量)中的所有數據嗎?我無法設置原先的viewController實例的contactList,這是我之前在AppDelegate中聲明的嗎? – JRoss

+1

這只是一個例子。如果你已經有實例使用:[viewController setContactList:contactListCopy];如果您需要從ServerConnect.m訪問它,請將其設置爲應用程序委託的屬性並通過它訪問它:[appDelegate.viewController setContactList:contactListCopy]; –

+3

@JRoss,讓該死的肯定,你從來不使用大寫字母在一個實例名稱的開頭(的viewController例如與視圖控制器類)。 – Till

0

在這行代碼:

[ViewController setContactList:contactListCopy];

你應該使用ViewController類型的變量。你使用它的方式,它應該是一個類方法,而不是一個屬性。 寫類似:

ViewController *viewController = [[ViewController alloc] init];

[viewController setContactList:contactListCopy];

+0

謝謝@Levi。儘管如此,我仍然在訪問ServerConnect.m之外的屬性變量時遇到了問題(請參閱下面的對話)。 – JRoss

+1

發表您的AppDelegate的h和您正在試圖訪問屬性 – Levi

相關問題