小编Jef*_*Jef的帖子

应用程序中加载语言的NSLocale

在我的界面中,我显示了一个语言环境的显示名称:

[[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]
Run Code Online (Sandbox Code Playgroud)

但是这会使用系统的区域设置来显示显示名称,该区域设置并不总是与应用程序的区域设置相同.例如,如果我用法语设置我的系统并且我的应用程序没有法语本地化,它将在英语界面中提供法语显示名称.相反,我想在英文界面中有一个英文显示名称,所以我不混合语言.

objective-c nslocale

6
推荐指数
1
解决办法
1691
查看次数

KVO:无法删除观察者

在我的界面中,我有一个NSTextFieldvalue被绑定了NSArrayController's selection.selectedType.title.所有NSArrayController's对象都是自定义对象,每个对象有两种方法:

- (MYType *)selectedType;
- (void)setSelectedType: (MYType *)type;
Run Code Online (Sandbox Code Playgroud)

具有伊娃selectedType.但是,他们确实拥有一个容纳所有MYType物体的iVar .代码归结为:

- (MYType *)selectedType
{
   if (someIndex == 0)
        return [types objectAtIndex: 0];
    else
        return [self typeWithIndex: someIndex];
}

- (void)setSelectedType: (MYType *)type
{
     someIndex = [type index];  
}
Run Code Online (Sandbox Code Playgroud)

MYType对象得到了NSString *title一个相应的@property和iVar synthesize.

每当我打电话setSelectedType:,变化立即可见,NSTextField并且一切似乎都有效,但我得到一条日志消息说:

无法从MYType 0x1a4830中删除关键路径"selectedType.title"的观察者NSArrayController 0x141160,这很可能是因为在没有发送适当的KVO通知的情况下,"selectedType"键的值已更改.检查MYType类的KVO兼容性.

我尝试setSelectedType:使用willChangeValueForKey:和封装方法didChangeValueForKey:然后我仍然有一个日志消息,但不同的一个:

无法从MYType 0x1a4be0中删除关键路径"title"的观察者NSKeyValueObservance 0x1c7570,因为它未注册为观察者.

objective-c key-value-observing key-value-coding nsarraycontroller cocoa-bindings

4
推荐指数
1
解决办法
3136
查看次数