无法在从NSDictionary获取数据的NSMutableArray的PickerView中显示值



我无法将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];

你们都应该克服崩溃并拥有价值观。现在,如果你有另一个崩溃,请做这些事情:

  • 正确格式化你的问题/代码,这真的很难阅读,让人们不想帮助你
  • 尝试设置断点以查看失败的确切行/原因
  • 当然,请向我们提交您所掌握的关于它的每一条信息:)

最新更新