iOS 如何告诉 App Delegate 从当前视图呈现新视图

Posted

技术标签:

【中文标题】iOS 如何告诉 App Delegate 从当前视图呈现新视图【英文标题】:iOS How to tell the App Delegate to present a new view from the current view 【发布时间】:2013-05-08 14:16:23 【问题描述】:

我有一个 iPhone 应用程序,当用户当前未使用该应用程序时它会接收通知。当用户点击通知时,当用户打开应用程序时,由于打开通知,他们应该被带到一个新的视图。

我将用于从通知中传递我的信息的 App Delegate 中的委托方法是:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

//Pass my data from JSON Payload in here

//Tell current view to go to new view


我相信对用户在退出应用程序之前与之交互的最后一个视图控制器的引用将是一种处理它并将对象存储在NSUserDefaults 中的方法。

任何关于我如何实现这一点的建议都将不胜感激。

【问题讨论】:

考虑使用NSNotificationCenter 将其解耦并接收您所在视图的通知。 【参考方案1】:

尝试使用 NSNotificationCenter :) 在应该完成推送的位置注册一个观察者,并从您的 appdelegate 发出通知。看看这个tutorial 进行注册和开火;)

// AppDelegate
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

    //Pass my data from JSON Payload in here
    NSObject *obj = myInformationForTheReciever;
    [[NSNotificationCenter defaultCenter] postNotificationName:@"goToView" object:obj];

-

// MyViewController
-(void)viewDidLoad

    [super viewDidLoad];
    // do your stuff

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(goToView:) name:@"goToView" object:nil];


- (void)goToView:(NSNotification*)notification

    NSObject* myInformationForTheReciever = [notification object];
    // do stuff with that

【讨论】:

可以给我这个教程吗?将不胜感激。 我必须在每个班级都放一个接收器吗?当应用委托触发通知时,我如何知道哪个类会收到通知? 每个注册了观察者的类都使用被解雇的名称;)就像在聊天室里蜜蜂一样。您加入房间(注册观察员),如果有人发送消息(发出通知),您将收到它:) 我将用一个简短的例子更新我的答案 感谢您的示例。我目前有这样的工作,但它是一种黑客行为。我只有一个已加载的视图,以模态方式呈现新视图。最初我假设我在每个班级都需要接收器,因为我将应用程序留在哪个屏幕上并不重要,一旦我在发布通知后返回应用程序,我将进入一个新视图。如果我要实现这个功能,我会假设每个类都需要唯一的观察者? 抱歉回复晚了。你说的对。 NotificationCenter 正是我的应用程序需要的东西。非常容易使用。

以上是关于iOS 如何告诉 App Delegate 从当前视图呈现新视图的主要内容,如果未能解决你的问题,请参考以下文章

iOS单元测试如何阻止App Delegate做事

iOS 中delegate的理解与使用(传值)

如何从 UI 测试访问 App Delegate?

如何从app delegate访问NSViewController?

如何从其他类(NSViewController 的子类)获取主窗口(App Delegate)?

如何从 UITextField Delegate 获取当前输入的文本? [复制]