Как мне вызвать функцию класса из объекта внутри класса? - PullRequest
0 голосов
/ 24 июня 2011

По сути, я хочу вызвать функцию основного класса в подклассе, на который основной класс содержит указатель.
Я знаю, что могу просто заставить главный класс инициировать подкласс и прикрепить к нему функцию. Но я не хочу этого, я хочу, чтобы подкласс сам инициировал свою функцию init.
Можно ли как-нибудь вызвать doSomething из некоторого класса?
Некоторый базовый код, чтобы показать, что я хочу:
В MainViewController.h:

@class SomeClass;

@interface MainViewController : UIViewController {
        SomeObject *someInformation;
        SomeClass *someInstance;
}
@property (nonatomic, strong) SomeClass *someInstance;

-(void)doSomething:(id)sender;
@end

В MainViewController.m:

@implementation MainViewController
@synthesize someInstance;
-(void)doSomething:(id)sender {
    //do something to someInformation
}
@end

В SomeClass.h:

@interface SomeClass : NSObject {
    UIStuff *outstuff;
}
@property (strong, nonatomic) UIStuff *outstuff;
-(void)somethingHappened:(id)sender;
@end

В SomeClass.m

@implementation SomeClass
@synthesize outStuff;
-(IBAction)somethingHappened:(id)sender {
    //call doSomething to the main class that points to this class
}
@end

1 Ответ

2 голосов
/ 24 июня 2011

Ваша терминология шаткая. Классы не «держат» другие классы. В вашем случае экземпляры класса MainViewController имеют указатели на объекты класса SomeClass. Я не педантичен; плохая терминология, подобная этой, ставит под сомнение понимание основных и важных концепций.

При этом объектам SomeClass нужна ссылка на объект MainViewController, если вы хотите, чтобы объект SomeClass мог отправлять сообщение экземпляру MainViewController. Из кода, который вы разместили, такой ссылки не существует. Вам нужно либо расширить интерфейс SomeClass для хранения явной ссылки на объект MainViewController, либо вы можете использовать что-то немного более косвенное (по крайней мере концептуально) через делегирование. Однако, поскольку вы не предоставили информацию о конкретном случае, наши решения будут сформированы без подробного анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...