Как я могу получить доступ к переменным свойств ViewController из другого класса?

Хорошо, это действительно подталкивает меня, и я уверен, что решение прост ... Я не могу установить переменные свойств ViewController из другого класса (SeverConnect.m), которые я правильно сформулировал и синтезировал в файле .h/ViewController. m файлов:

<�Сильный> ServerConnect.h:

#import 
#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:'"
}

Как я уже упоминал выше, я объявил и синтезировал переменную property, «contactList», в файлах .h/.m файла ViewController (без ошибок):

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

Может ли кто-нибудь сказать мне, что я делаю неправильно? Заранее благодарим за любую помощь, которую вы можете предоставить!

1
добавлено отредактировано
Просмотры: 1
de

2 ответы

вы пытаетесь получить доступ к свойству экземпляра в классе:

[ViewController setContactList:contactListCopy];

вам нужно сначала создать экземпляр класса ViewController, а затем установить его свойство. Что-то вроде этого:

ViewController *viewController = [[ViewController alloc] init];
[viewController setContactList:contactListCopy];
1
добавлено
@JRoss, вам нужно импортировать класс appDelegate в ServerConnect.m и обратиться к своему делегату приложения следующим образом (при условии, что имя вашего файла делегирования приложения AppDelegate): AppDelegate * appDel = (AppDelegate *) [UIApplication sharedApplication] .delegate;
добавлено автор rdelmar, источник
@JRoss и убедитесь, что вы никогда не используете заглавные буквы в начале имени экземпляра (например, viewController и ViewController для класса).
добавлено автор Till, источник
Спасибо Эдвину за быстрый ответ! Я создаю экземпляр класса ViewController из своего AppDelegate, когда приложение сначала загружает («... doneFinishLaunchingWithOptions ...»): viewController = [[ViewController alloc] initWithNibName: @ «ViewController_iPhone» bundle: nil]; Создав еще один экземпляр, не потеряю ли я все данные, сохраненные в предыдущем экземпляре viewController (т. Е. Другие переменные экземпляра)? Не могу ли установить список контактов исходного экземпляра viewController, который я ранее заявлял в своем AppDelegate?
добавлено автор JRoss, источник
@EdwinIskandar Я просто так сделал, чтобы сделать экземпляр viewController еще одним свойством моего AppDelegate (аналогично в его .h/.m-файлах), но когда я попробую ваше предложение выше, я получаю следующую ошибку: «Semantic Issue: Property 'viewController' не найден на объекте типа «AppDelegate» «Любые идеи, почему он не будет находить свойство« viewController »AppDelegate?
добавлено автор JRoss, источник
Спасибо, @. Вы знаете, почему у меня возникнут проблемы с доступом к моей переменной экземпляра свойства AppDelegate 'viewController' из моего ServerConnect.m?
добавлено автор JRoss, источник
да, это был просто пример. Если у вас уже есть экземпляр, используйте это: [viewController setContactList: contactListCopy]; Если вам нужно получить к нему доступ с ServerConnect.m, сделайте это свойство делегата приложения и получите доступ к нему: [appDelegate.viewController setContactList: contactListCopy];
добавлено автор Edwin Iskandar, источник

В этой строке кода:

[ViewController setContactList: contactListCopy];

вы должны использовать переменную типа ViewController . Как вы его используете, это должен быть метод класса, а не свойство. Напишите что-то вроде:

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

[ViewController setContactList: contactListCopy];

0
добавлено
Отправьте свой .h из AppDelegate и способ, которым вы в настоящее время пытаетесь получить доступ к собственности
добавлено автор Levi, источник
Спасибо @Levi. Однако у меня все еще есть проблемы с доступом к переменным свойств вне ServerConnect.m (см. Беседу ниже).
добавлено автор JRoss, источник