【问题标题】:Cocoa sending a string to a NSTextField in another class (Obj C)Cocoa 将字符串发送到另一个类中的 NSTextField (Obj C)
【发布时间】:2016-04-02 13:33:43
【问题描述】:

过去一天试图解决这个问题,解决方案可能很简单,但我就是想不通。基本上我正在尝试将我的WebView 的当前 URL 发送到另一个班级的NSTextField。将WebView URL 发送到MyViewController 中的字符串可以正常工作,所以我知道它正在被传递。但是,当我将此字符串分配给我的 TextField.StringValue 时,它会返回 (null)。

【问题讨论】:

  • 将变量从一个视图控制器传递到另一个视图控制器并不容易。一个简单的解决方案是使用单例,这样您就可以向它发送一个变量,然后让它传递给另一个。

标签: objective-c xcode macos cocoa webview


【解决方案1】:

您的视图控制器之间的关系似乎有问题。这两件事应该如何关联?

在您的代码中考虑这一点:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{
    // Getting url from WebView
    NSString *newURL = [[[[frame dataSource] request] URL] absoluteString];
    MyViewController *vc = [[MyViewController alloc] init];
    [vc UrlSet:newURL];
}

在这里,您创建了一个全新的 MyViewController 实例,然后向它传递了一个 URL,但您永远不会对这个全新的实例进行任何操作。一旦例程完成,它就会被简单地删除。您的意思是要找到一个已经存在的 MyViewController 实例并告诉该实例有关 URL 的信息吗?这似乎更合理。

【讨论】:

  • 认为我需要重新考虑我的方法是如何工作的,因为我没有考虑到视图控制器之间的关系。目前我有 MyViewController --> tabHandler --> FirstWebController,其中 tabHandler 在 MyViewController 的一个容器视图中。明天再去看看能不能解决
【解决方案2】:

所以在又花了几天时间尝试使用委托解决问题后,我放弃了,转而使用 NSNotificationCenter。它可能不是最有效的方法,但它很有效并且完美地完成了这项工作。

我只是将当前 URL 从我的 FirstWebController 类发送到我的 MyViewController 类,使用 NSNotificationCenter 并将对象设置为我当前的 URL。在 MyViewController 类中,我调用了通知方法并将我的文本字段分配给对象。

Here's a good example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 2011-04-11
    • 1970-01-01
    • 2022-01-04
    • 2016-08-03
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多