这里,我的NSMutableArray
页面中有一个AppDelegate
,当用户在数据库中添加值(用户名)时,数组将会更新。现在我希望数组值(用户名)显示在下一个视图中,以便在Picker View中列出。我知道有更多相关的问题,但我找不到解决方案。任何帮助表示赞赏。
这是我的代码:
我在AppDelegate
页面中声明的数组,名为jobarray
,现在我需要将jobarray
中的项目复制到下一个视图中,我已声明{{1} }。
pickerarray
但它返回错误消息,
pickerarray = [[NSMutableArray alloc] initWithArray:appDelegate.jobarray copyItems:YES];
答案 0 :(得分:1)
您的SQLite对象不符合NSCopying协议 - 您尚未实现
- (id)copyWithZone:(NSZone *)zone;
方法。您可以实现此方法以使对象可复制,但如果您只需要复制进行显示,则最好只复制数组本身:
NSMutableArray *newArray = [originalArray mutableCopy];
这只保留了第一个数组的对象,不需要实现复制协议。
答案 1 :(得分: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
)
答案 2 :(得分:-1)
要从数组填充UIPickerView,首先需要为UIPickeView数据源和委托创建一个连接回ViewController。您可以通过CTRL以正常方式在界面生成器中拖动来实现此操作 - 从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中 - 如果内容是静态的。