0

如果是這樣,怎麼樣?可可:NSArrayController可以分類以提供自定義的「控制器密鑰」嗎?

這似乎是一個非常有用的事情能夠做到,但我不能爲我的生活弄清楚或找到網上的任何信息!

我記住的具體情況是我有兩個相鄰的表格,左邊最初包含一個名稱列表,然後我要「向左移動」和「向右移動」按鈕將名稱從一個表格移動到另一個表格。

我想到了一個優雅的解決這個問題是使用一個陣列控制器有兩個控制鍵「arrangedLeftObjects」和arrangedRightObjects」

我要在這裏瘋狂!有人可以提供一些線索。我會上張貼請求例如代碼

非常感謝

編輯:初始嘗試

的NSArrayController的子類被實現(到目前爲止)正是如此:

@interface LeftRightArrayController : NSArrayController { 
    NSArray * leftObjects; 
} 

-(NSArray *)leftObjects; 
-(void)setLeftObjects:(NSArray *)newLeftObjects; 
@end 


@implementation LeftRightArrayController 

-(NSArray *)leftObjects { 
    return leftObjects; 
} 

-(void)setLeftObjects:(NSArray *)newLeftObjects { 
    leftObjects = newLeftObjects; 
} 


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    [self setLeftObjects:[NSArray arrayWithArray:[self arrangedObjects]]]; 
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
} 

@end 

,並提供給控制器的數據:

[myArrayController addObserver:myArrayController forKeyPath:@"arrangedObjects" options:0 context:NULL]; 

NSString *myKey = [NSString stringWithString:@"name"]; 
NSDictionary *myNewDictionary1 = [NSDictionary dictionaryWithObject:@"date1" forKey:myKey]; 

NSArray *myArray = [NSArray arrayWithObjects:myNewDictionary1, nil]; 

[myArrayController setContent:myArray]; 

此代碼的工作時,我只綁定到「左,右陣列Controller.arrangedObjects.name」 但是作爲休息儘快嘗試綁定到「Left Right Array Controller.leftObjects.name」

+0

發表你已經嘗試過的例子。 – trudyscousin 2012-04-02 20:48:14

+0

我已經把一些代碼。它似乎像自定義控制器鍵將是一個有用的事情能夠做到這一點,我看不到任何地方,所以我已經變得可疑。 – 2012-04-02 21:35:36

回答

0

您不想這樣做。每個表格視圖應始終使用一個NSArrayController。在你的情況下,你應該有兩個支持數組,一個用於左對象,另一個用於正確的對象。

然後,您應該通過自己的數組控制器將每個表視圖綁定到適當的數組。

然後,您應該實現一個單獨的控制器,通過使用符合KVO的訪問器直接操作陣列或使用NSArrayController的各種插入/刪除方法來管理陣列之間的數據傳輸。

+0

看起來像一個荒謬的數組控制器的數量可能(在我的潛在天真的意見)可以實現只有一個和幾個自定義鍵。 – 2012-04-02 23:02:02

+0

說我很瘋狂,想按照我的方式去做,可以嗎?可以做到嗎?爲什麼它是不受歡迎的? – 2012-04-02 23:02:38

+0

因爲這不是陣列控制器的工作方式。每個表視圖應始終有一個陣列控制器。這就是他們設計的工作方式。我不認爲兩個陣列控制器而不是一個「瘋狂」。如果你不需要,你不應該繼承子類。只需創建一個輕量級定製控制器來進行數組移位,然後使用本機陣列控制器來處理表格顯示。 – 2012-04-02 23:05:12

相關問題