2017-03-07 122 views
0

我有一個堆棧來填充一個視圖數組。用NSArray和NSMutableArray填充NSStackView

_countViewArray = [[NSArray alloc] init]; 
_countViewArray = @[self.a.view,self.b.view,self.c.view]; 
_stackView = [NSStackView stackViewWithViews:_countViewArray]; 

它工作的很好。 如果我想用一個可變數組替換這個數組,怎麼辦?

我嘗試此代碼爲「動態」堆棧視圖中,並最終轉換成可變數組簡單數組,但不工作:

_mutableCountViewArray = [[NSMutableArray alloc] init]; 

[_mutableCountViewArray addObject:@[self.a.view]]; 
if (caseCondition){ 
    [_mutableCountViewArray addObject:@[self.b.view]]; 
} 
[_mutableCountViewArray addObject:@[self.c.view]]; 

_countViewArray = [_mutableCountViewArray copy]; 
_stackView = [NSStackView stackViewWithViews:_countViewArray]; 

在consolle如果我打印可變數組我有:

(
    (
    "<NSView: 0x600000121ea0>" 
), 
    (
    "<NSView: 0x600000120780>" 
, 
    (
    "<NSView: 0x60000a0>" 
) 
) 

我該如何解決?

回答

1

的問題是,要添加陣列(包含單個視圖)而不是視圖...

記住,@[x]是文本表達式限定包含x


因此,一個線的NSArray像這樣:

[_mutableCountViewArray addObject:@[self.a.view]]; 

應該變成:

[_mutableCountViewArray addObject:self.a.view]; 

(當然,這也適用於每一個對象,你在接下來的幾行添加...)


此外,作爲一個旁註:

_countViewArray = [[NSArray alloc] init]; 

在你的第一個片段是多餘的,因爲你在下一行重新分配一個值...

+0

嘿,謝謝!我不明白多餘的感覺。第一個代碼塊沒有可變數組,第二個數組的alloc被理解... – Joannes

+0

@alfioal我的意思是說你可以安全地刪除這行'_countViewArray = [[NSArray alloc] init];'(在你使用的情況下第一個片段),因爲您在下一行再次爲'_countViewArray'指定了一個不同的值......我希望這是有道理的:) – Alladinian

+0

啊,好的!我明白! – Joannes