【问题标题】:How do I make this code KVO compliant?如何使此代码符合 KVO?
【发布时间】:2016-12-14 17:08:40
【问题描述】:

我正在尝试掌握绑定,并在 xcode 中设置了一个带有 CPTextView 的 CPWindow,并将窗口和 textview 绑定到它们各自的出口。

我有点卡住了,但是试图让 textview 显示 _xmlContent。我已将 xcode 中的绑定设置为“委托”,并将密钥路径设置为 xmlContent(也尝试了 self.xmlContent 和 _xmlContent 以及我能想到的所有变体)。

    @import <Foundation/Foundation.j>
    @import <AppKit/AppKit.j>

    @implementation AppController : CPObject
    {
        @outlet CPWindow    theWindow;
        @outlet CPTextView  codeView;

        CPString _xmlContent @accessors(property=xmlContent);
    }

    // ...

    @end

我现在收到的信息是:

CPUndefinedKeyException: <AppController 0x00a177> is not key value coding-compliant for the key xmlContent

如何使我的 AppController 键值编码与键“xmlContent”兼容?

【问题讨论】:

    标签: cappuccino objective-j


    【解决方案1】:

    您的代码看起来正确。我自己重新创建了它,它对我来说很好用:

    @implementation AppController : CPObject
    {
        @outlet CPWindow    theWindow;
    
        CPString _xmlContent @accessors(property=xmlContent);
    }
    
    - (void)applicationDidFinishLaunching:(CPNotification)aNotification
    {
    }
    
    - (void)awakeFromCib
    {
        [theWindow setFullPlatformWindow:YES];
        [self setXmlContent:@"kitten"];
    

    您应该验证您正在运行您认为正在运行的代码。这里的一个常见陷阱是,一些网络浏览器真的很喜欢保留代码的缓存副本,因此请确保在您正在测试的任何浏览器中启用“禁用缓存”选项。

    如果一切都失败了,请更改您的开发 HTTP 服务器的端口号并从新 URL 加载页面。这将强制浏览器获取所有内容的新副本(因为 URL 已更改)。

    【讨论】:

    • 虽然我没有在 Safari 中启用“禁用缓存”(现在就做!),但我确实尝试了一些技巧来强制缓存破坏。我以为我什至手动清除了 Safari 中的所有缓存。但我想我错了。
    • 是的,Safari 可以难以置信地粘在它的缓存上。 Chrome 有自己的一系列问题,但我发现“在开发人员工具打开时禁用缓存”选项在开发时工作得很好。
    • 这将是我的新策略:)
    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多