我无法将NSMutableArray中的数据显示到UIPickerView中。NSMutableArray通过一个函数从NSDictionary中获取其值。当我运行代码时,我得到
'-[__NSDictionaryI length]: unrecognized selector sent to instance'
任何帮助都将不胜感激。非常感谢。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self setViewElementProperties];
self.preButton.hidden=YES;
self.nextButton.hidden =YES;
if (self.prayerID) {
}else if (self.prayerItem){
[self populatePrayerDataFromDictionary];
}
}//end of ViewDidLoad
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)setViewElementProperties{
self.prayerTitleField.borderStyle = UITextBorderStyleNone;
self.prayerTitleField.font = [UIFont boldSystemFontOfSize:20];
self.prayerTitleField.textColor = [UIColor grayColor];
[self.prayerTitleField setEnabled:NO];
self.prayerTextView.font = [UIFont systemFontOfSize:18];
[self.prayerTextView setEditable:NO];
UIBarButtonItem *shareButton = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStylePlain target:self action:@selector(shareButtonPressed:)];
self.navigationItem.rightBarButtonItem = shareButton;
}
-(void)shareButtonPressed:(id)sender
{
self.myPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0,300,0,0)];
self.myPickerView.dataSource = self;
self.myPickerView.delegate =self;
self.myPickerView.showsSelectionIndicator = YES;
self.myPickerView.backgroundColor =[UIColor grayColor];
self.pickerViewValues = [[NSMutableArray alloc]init]; //(pickerview values)
[self getFamilyAndOtherMemberIDUsernamesOfCurrentMember];
[self.view addSubview:self.myPickerView];
}//end of shareButtonPressed
-(NSMutableArray *)getFamilyAndOtherMemberIDUsernamesOfCurrentMember
{
self.pickerViewValues = [self getOtherMemberIDUsernamesOfCurrentAccount];
NSMutableDictionary *familyAccount = [@{@"ID":@0, @"USERNAME":@"family"} mutableCopy];
[self.pickerViewValues addObject:familyAccount];
NSString *shareableMembers = self.pickerViewValues;
return self.pickerViewValues;
}
-(NSMutableArray *)getOtherMemberIDUsernamesOfCurrentAccount{
NSMutableArray *members = [[NSMutableArray alloc]init];
NSString *accountID = [[NSUserDefaults standardUserDefaults] valueForKey:@"accountID_efs"];
NSString *currentMemberID = [[NSUserDefaults standardUserDefaults] valueForKey:@"memberID_efs"];
NSDictionary *accountIDDict = @{@"ACCOUNT_ID":accountID, @"CURRENT_MEMBER_ID":currentMemberID};
SQLiteResult *memberTableQueryResult = [SQLiteDatabase qin:@"SELECT ID, USERNAME FROM MEMBERS WHERE ID IN (SELECT MEMBER_ID FROM ACCOUNT_MEMBERS WHERE ACCOUNT_ID = :ACCOUNT_ID AND MEMBER_ID <> :CURRENT_MEMBER_ID) ORDER BY USERNAME" withParams:accountIDDict];
if (memberTableQueryResult.rows.count) {
members = [memberTableQueryResult getResultData];
}
return members;
}
//UIPIckerView DataSource
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.pickerViewValues count];
}
// UIPickerView Delegate
-(NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [self.pickerData objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSString *selectedPickerValue = [self.pickerData objectAtIndex:row];
}
请检查您是否正在为代码中的NSDictionary
调用length
。获取NSDictionary
中条目数的正确方法是count
。
从我对这个格式糟糕的问题的简要阅读中,我看到了两个问题。
首先,您要给一个新分配的数组作为选择器值,所以它不能是空的。第二,我想说这条线是问题所在,在sharedButtonPress:(id)sender
中
[self getFamilyAndOtherMemberIDUsernamesOfCurrentMember];
请尝试在那里放置一个断点,看看它是否在那里崩溃。如果是这样(我希望它应该是这样),那是因为你正在向self
返回一个NSMutableArray
(根据它下面的方法)。self
这里是viewController。
只需更改这一行:
self.pickerViewValues = [[NSMutableArray alloc]init];
这行:
[self.pickerViewValues = getFamilyAndOtherMemberIDUsernamesOfCurrentMember];
你们都应该克服崩溃并拥有价值观。现在,如果你有另一个崩溃,请做这些事情:
- 正确格式化你的问题/代码,这真的很难阅读,让人们不想帮助你
- 尝试设置断点以查看失败的确切行/原因
- 当然,请向我们提交您所掌握的关于它的每一条信息:)