iOS:NSObject调用并检测哪个UIVIewController进行了调用
希望这是一个简单的 我有一个NSObject,其方法在多个UIViewController中使用(NSObject导入到我的.pch文件中) 然后UIViewController像这样调用NSObjectiOS:NSObject调用并检测哪个UIVIewController进行了调用,ios,uiviewcontroller,nsobject,Ios,Uiviewcontroller,Nsobject,希望这是一个简单的 我有一个NSObject,其方法在多个UIViewController中使用(NSObject导入到我的.pch文件中) 然后UIViewController像这样调用NSObject [thinsobjectdosomething] 这一切都在计划中,所以没有问题。。。但是,我希望doSomething方法能够检测哪个UIViewController对该对象进行了调用。然后,基于这些信息,我可以以任何给定的方式操纵UIViewController 我之所以需要这样做,是因为
[thinsobjectdosomething]代码>
这一切都在计划中,所以没有问题。。。但是,我希望doSomething方法能够检测哪个UIViewController对该对象进行了调用。然后,基于这些信息,我可以以任何给定的方式操纵UIViewController
我之所以需要这样做,是因为如果我有一个UIAbbar,每个选项卡都加载了不同的UIViewController,但都调用了全局NSObject,那么我需要将进一步的操作定向到一个特定的UIViewController
我知道我可以使用keyWindow,但我不确定这正是我想要的
任何建议都很好,谢谢
罗伊
编辑:
实际上,也许在NSObject中,我可以检测当前选择的选项卡,然后在堆栈中获取顶部视图。。。这样做参考?有人想过为什么这是个坏主意吗?使用运行时代码,您可能可以回溯调用堆栈,但对于一个简单的问题,这是一个相当复杂的解决方案。我建议您参考API获得灵感,并修改doSomething方法,以采用如下控制器参数:
-(void) doSomethingWithViewController:(UIViewController *) viewController;
[theObject doSomethingWithViewController:self];
通过这种方式,当您可以使用剂量测量法时,您可以向self传递一个引用,如下所示:
-(void) doSomethingWithViewController:(UIViewController *) viewController;
[theObject doSomethingWithViewController:self];
你的问题就解决了——很简单
另外,如果您有其他参数,可以选择其他签名样式
-(void) viewController:(UIViewController *) viewController doSomethingWithX:(id) x;
这完全取决于什么对你最有意义。我有点同意@drekka的答案,但它有一个问题……代码行:
- (void) viewController:(UIVIewController*)viewController doSomething;
语法上不正确。然而,他通过提出另一个正确的解决方案来弥补自己的不足:
- (void) doSomethingWithViewController:(UIViewController*) viewController;
另一种方法是在自定义类上使用委托,并让ViewController作为委托订阅,因为在您的情况下,将ViewController作为参数传递似乎没有什么意义。例如:
@protocol MyCustomNSObjectDelegate;
@interface MyCustomNSObject : NSObject
@property (nonatomic, assign) id<MyCustomNSObjectDelegate delegate;
- (void) doSomething;
@end
@protocol MyCustomNSObjectDelegate <NSObject>
@required
- (void) myCustomNSObject:(MyCustomNSObject*)myObject takeFurtherActionWithData:(NSString*)someData;
@end
希望这能有所帮助。Oops,教我如何键入代码,而不是剪切和粘贴:-)将更正我的答案。