【问题标题】:Xcode, OS X: viewing a simple NSMutableArrayXcode,OS X:查看一个简单的 NSMutableArray
【发布时间】:2011-12-15 20:47:30
【问题描述】:

相对新手问题。我的应用程序有一个简单的 NSNumbers NSMutableArray。 (大约十几个整数)我希望我的 UI 有一个显示数字的视图,以便用户知道数组中的内容。我希望视图的内容是最新的,所以我想我想要绑定到数组(或其内容)。有没有简单的方法来做到这一点?

我想如果我更改模型以便 NSMutableArray 包含一个自定义类,该类具有声明属性的 setter 和 getter(遵循 Lucas 在 NSTableView 绑定上的 YouTubtorial),我想我可以解决这个问题,但我认为可能会有一种更简单的方法,它允许我使用我的 NSNumbers 数组。如果我必须重做我的 NSMutableArray,我必须做大量的编辑。谢谢...

【问题讨论】:

    标签: xcode macos cocoa nsarray


    【解决方案1】:

    您可以在模型中使用普通的旧 NSNumber(或其他任何东西),无需使用自定义模型类。但是,如果您的模型数据需要任何特殊格式的视图,您可以创建一个 NSValueTransformer 子类。

    在您的 NIB 中,您将拥有一个 NSTableView 和一个 NSArrayController。

    将 TableView 列的 Value 属性绑定到 NSArrayController,控制器键 = 排列对象,模型键路径为空(因为您查看的是 NSNumber 实例本身,而不是 NSNumber 的属性)。

    将 NSArrayController 的 Content Array 属性绑定到您的模型(NSNumbers 的 NSMutableArray)。这可能是您的视图控制器或应用程序委托上的一个属性。

    就是这样。您还可以将按钮连接到 NSArrayController 上的 add:remove: 操作,并且您将能够在数组中添加和删除项目。

    此外,您需要在 NSMutableArray 更改时发送 KVO 通知。例如,假设您的 NSMutableArray 通过名为“numbers”的属性公开:

    [self willChangeValueForKey:@"numbers"];
    [_numbers addObject:[NSNumber numberWithInt:123]];
    [self didChangeValueForKey:@"numbers"];
    

    如果您将“数字”属性设置为新值,您将免费获得这些通知:

    self.numbers = [NSMutableArray arrayWithObject:foo];
    

    【讨论】:

    • 如果您实现并使用正确命名的可变访问器方法,您还将免费获得这些通知。在此处阅读更多信息:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…。简而言之,您实现:- (NSUInteger)countOfNumbers; - (NSNumber *)objectInNumbersAtIndex:(NSUInteger)index; - (void)insertObject:(NSNumber *)aNumber inNumbersAtIndex:(NSUInteger)index; - (void)removeObjectFromNumbersAtIndex:(NSUInteger)index; - (void)replaceObjectInNumbersAtIndex:(NSUInteger) withObject:(NSNumber *)aNumber
    • 实现并使用。简单地实现它们将无法让您直接与阵列对话并获得 KVO 通知;您需要向自己发送这些访问者消息(或将所有内容包装在 will/didChangeValueForKey: 中)以引起通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多