0

在这里,NSMutableArray我的AppDelegate页面中有一个,当用户在数据库中添加值(用户名)时,数组将被更新。现在我希望将数组值(用户名)显示在下一个视图中,以便在选取器视图中列出。我知道还有更多相关的问题,但我找不到解决方案。任何帮助表示赞赏。

这是我的代码:

我在页面中声明的数组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.
4

3 回答 3

1

您的 SQLite 对象不符合 NSCopying 协议 - 您尚未实现

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

方法。您可以实现此方法以使您的对象可复制,但如果您只需要复制来显示,您最好只复制数组本身

NSMutableArray *newArray = [originalArray mutableCopy];

这只保留了第一个数组的对象,不需要搞乱复制协议的实现。

于 2012-08-03T06:41:34.857 回答
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
                 )
于 2012-08-27T11:34:53.750 回答
-1

要从数组中填充 UIPickerView,您需要首先为 UIPickerView 数据源创建一个连接,然后将其委托回 ViewController。您可以通过 CTRL 以正常方式在 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 - 如果内容是静态的。

于 2012-08-03T06:45:02.563 回答