2012-08-03 106 views
0

在這裏,我在我的AppDelegate頁面有一個NSMutableArray,當用戶在數據庫中添加值(用戶名)時,數組將被更新。現在我想讓數組值(用戶名)顯示在下一個視圖中,以便在拾取器視圖中列出。我知道還有更多相關的問題,但我找不到解決方案。任何幫助讚賞。如何在iPhone中將NSMutableArray值複製到另一個NSMutableArray中?

這裏是我的代碼:

我在AppDelegate網頁都宣稱,一個名爲jobarray,現在我需要在jobarray的項目複製到下一個視圖,在那裏,我已經宣佈pickerarray數組。

pickerarray = [[NSMutableArray alloc] initWithArray:appDelegate.jobarray copyItems:YES]; 

但它返回的錯誤信息,

['NSInvalidArgumentException', reason: '-[Coffee copyWithZone:]: unrecognized selector sent to instance 0x822d410']  where 'Coffee' is my sqlite3 object file. 
+0

看一看@ http中的答案://計算器。 COM /問題/ 2976910 /複印問題,NSMutableArray裏。 – Neo 2012-08-03 06:41:18

+0

感謝您的鏈接,我已閱讀並將[Copyitems:YES]更改爲'NO'。我得到這個錯誤, - [Coffee isEqualToString:]:無法識別的選擇器發送到實例0x8524fa0。請對此提出建議。 – jireh 2012-08-03 06:50:04

回答

1

你的SQLite的對象不符合NSCopying協議 - 您還沒有實現

- (id)copyWithZone:(NSZone *)zone; 

方法。您可以實現此方法,使你的對象可複製的,但如果你只需要顯示的複製,你最好複製陣列本身只

NSMutableArray *newArray = [originalArray mutableCopy]; 

這個只保留第一個數組的對象,不需要搞亂執行復制協議。

+0

感謝您的回答(H2CO3),能否請您解釋一下如何使'jobarray'(在我的文章中提到)本身的副本。 – jireh 2012-08-03 06:48:15

+0

@jireh正如我所說的,你必須實現copyWithZone:方法。 – 2012-08-03 07:07:05

+0

你可以給我一些代碼,使'arrayWithZone:方法'內的數組。 – jireh 2012-08-03 13:06:50

-1

要從數組填充UIPickerView,您需要首先爲UIPickeView數據源和委託創建一個連接返回到ViewController。您可以通過在Interface Builder中以常規方式拖動來執行此操作 - 從UIPickerView控件中進行拖動。

您還需要確保將委託協議包含到接口文件中。所以像這樣的東西;

@ViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate> { 

}

然後,你將需要在實現文件以創建UIPickerView人口的委託方法。

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    //One column 
    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    //set number of rows 
    return myArrayObject.count; 
} 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    //set item per row 
    return [myArrayObject objectAtIndex:row]; 
} 

這假定myArrayObject已被正確聲明並在別處填充。即在viewDidLoad中 - 如果內容是靜態的。

+0

雅我已經聲明數據源和代理都在xib和頭文件中,但它不起作用。 – jireh 2012-08-03 06:56:24

+0

我很抱歉,因爲我認爲我可能把你的問題解釋錯了。我以爲你問的是如何從數組中填充UIPickerView,但我認爲實際上你在問如何將數組的內容複製到另一個數組中? – 2012-08-03 07:04:02

+0

爲什麼你需要複製到一個新的數組?你爲什麼不能只使用jobArray作爲pickerView的數據源? – 2012-08-03 07:05:33

0
[arr1 initWithObjects:@"1",@"2", nil]; 

是沒有意義的,你可能想要的是使用的NSMutableArray:

NSArray *arr1 = [NSArray arrayWithObjects:@"1",@"2", nil]; 
NSMutableArray *arr2 = [arr1 mutableCopy]; 

NSLog(@"arr1: %p, %@", arr1, arr1); 
NSLog(@"arr2: %p, %@", arr2, arr2); 

的NSLog輸出:

arr1: 0x7924c50, (
       1, 
       2 
       ) 
arr2: 0x7924f00, (
       1, 
       2 
       ) 
相關問題