【发布时间】:2014-03-17 12:59:30
【问题描述】:
我正在尝试在我的 OSX 程序中使用 NSPopUpButtons。为了将 KVO 用于其字符串和索引,我编写了一个自定义类(DLPopUpButtonManager)。
@interface DLPopUpButtonManager : NSObject
@property NSArray *contentArray;
@property NSString *selectionString;
@property NSNumber *selectionIndex;
@end
当在程序中只使用一次时,该类工作正常。但… 当我使用多个实例时,它们的 contentArray 是共享的,这意味着两个 contentArray 指向同一个实例。啊??这完全让我感到困惑。 (封装等)
我有两个 NSPopUpButton,每个都连接到 DLPopUpButtonManager 类的对象。这两个类通过两个对象在 Interface Builder 中实例化。然后在我的 AppDelegate 中初始化它们。
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (weak) IBOutlet DLPopUpButtonManager *pUBM_1;
@property (weak) IBOutlet DLPopUpButtonManager *pUBM_2;
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self.pUBM_1 setContentArray:[NSArray arrayWithObjects:@"Female", @"Male", nil]];
[self.pUBM_2 setContentArray:[NSArray arrayWithObjects:@"Tall", @"Short", nil]];
[self showDetails:nil];
}
我发现两个实例(令人困惑和不需要)使用相同的 contentArray。
我使用断点进行了调查,发现我确实有两个单独的 DLPopUpButtonManager 实例,但它们的 contentArrays 具有相同的指针值。
Printing description of $20: <DLPopUpButtonManager: 0x6080000100b0>
Printing description of $23: <DLPopUpButtonManager: 0x6080000100c0>
Printing description of $25: <__NSArrayI 0x600000223ba0>
(
Tall,
Short
)
Printing description of $24: <__NSArrayI 0x600000223ba0>
(
Tall,
Short
)
(lldb)
我无法通过 Google 或在 SO 上找到类似的内容。谁能告诉我,我在这里做错了什么? 我上传了一个小示例程序到 GitHub (https://github.com/donnerluetjen/PopUpButtonEtude)。
感谢您对此问题的任何意见。
【问题讨论】:
-
显而易见的问题,但是,您没有为两者分配相同的数组是吗? (我没有看过示例项目)。
-
@JoeFryer:我添加了更多细节。我用两个不同的数组初始化它们。
标签: objective-c cocoa interface-builder xcode5