-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x145ecca0

Posted

技术标签:

【中文标题】-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x145ecca0【英文标题】:-[__NSArrayM length]: unrecognized selector sent to instance 0x145ecca0 【发布时间】:2017-01-26 10:21:52 【问题描述】:

我收到以下错误,无法弄清楚它在哪里。请帮我找出问题所在。 TIA

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“” *** 首先抛出调用栈:

- (void)viewDidLoad
    
        [super viewDidLoad];
     UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont fontWithName:@"Helvetica neue" size:20.0];
        //label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        //label.textAlignment = UITextAlignmentCenter;
        label.textColor = [UIColor whiteColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = @"My Details";
        [label sizeToFit];
    

    #pragma mark -
    #pragma mark Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
        // Return the number of sections.
        return 1;
    


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
        // Return the number of rows in the section.

        return 30;
    


    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 


        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
            cell.textLabel.font=[UIFont fontWithName:@"Helvetica neue" size:14.0];
            cell.detailTextLabel.font=[UIFont fontWithName:@"Helvetica neue" size:13.0];
            cell.textLabel.textColor=[UIColor colorWithRed:199.0/255.0 green:65.0/255.0 blue:69.0/255.0 alpha:1.0];
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
        

        NSArray *keys = [myDict allKeys];

        for(int i=0 ; i<[keys count]; i++ )
        

            NSString *value=[myDict objectForKey:[keys objectAtIndex:i]];
            if ([value isEqual: [NSNull null]]||[value length]==0) 

                [myDict setValue:@"--" forKey:[keys objectAtIndex:i]];

            

        

        if(indexPath.row==0)
        
            cell.textLabel.text = @"Relationship";
            cell.detailTextLabel.text=[myDict objectForKey:@"Relationship"];
        

        if(indexPath.row==1)
        
            cell.textLabel.text = @"Person Name";
            cell.detailTextLabel.text=[myDict objectForKey:@"PersonName"];
        

        if(indexPath.row==2)
        
            cell.textLabel.text = @"Shopping";
            cell.detailTextLabel.text=[myDict objectForKey:@"shopping"];
        
        if(indexPath.row==3)
        
            cell.textLabel.text = @"Quantity";
            cell.detailTextLabel.text=[myDict objectForKey:@"Quantity"];
        
        if(indexPath.row==4)
        
            cell.textLabel.text = @"Pants";
            cell.detailTextLabel.text=[myDict objectForKey:@"pants"];
        
        if(indexPath.row==5)
        
            cell.textLabel.text = @"Shirts";
            cell.detailTextLabel.text=[myDict objectForKey:@"shirts"];
        
        if(indexPath.row==6)
        

            cell.textLabel.text = @"Other";
            cell.detailTextLabel.text=[myDict objectForKey:@"other"];
        
        if(indexPath.row==7)
        
            cell.textLabel.text = @"Start Date";
            NSString *str=[myDict objectForKey:@"startDate"];
            NSString *str2= [str substringToIndex:10];
            cell.detailTextLabel.text=str2;
        
        if(indexPath.row==8)
        
            cell.textLabel.text = @"End Date";
            NSString *str=[myDict objectForKey:@"endDate"];
            NSString *str2= [str substringToIndex:10];
            cell.detailTextLabel.text=str2;
        
        if(indexPath.row==9)
        
           cell.textLabel.text = @"Address";
           cell.detailTextLabel.text=[myDict objectForKey:@"address"];
        
        if(indexPath.row==10)
        
            cell.textLabel.text = @"Notes";
            cell.detailTextLabel.text=[myDict objectForKey:@"Notes"];
        
        if(indexPath.row==11)
        
            cell.textLabel.text = @"Bill";
            cell.detailTextLabel.text=[myDict objectForKey:@"bill"];
        
        if(indexPath.row==12)
        
            cell.textLabel.text = @"Grand Total";


            cell.detailTextLabel.text=[myDict objectForKey:@"total"];

        
        if(indexPath.row==13)
        
            cell.textLabel.text = @"Signature";
            cell.detailTextLabel.text=[myDict objectForKey:@"sign"];
        

        return cell;
    

【问题讨论】:

除了这个问题,考虑使用数组作为数据源和/或静态单元格。 【参考方案1】:

NSArray 不回复length,而是回复count。 很可能在value 中,您期望的是NSString,但实际上有一个数组。 设置值时出现问题。

【讨论】:

【参考方案2】:

可能是您期待一些不同的东西并且它具有其他类型的值。可能是您期待 NSString 并且它提供任何其他类型。 您可以使用 id 数据类型,以便它可以提供帮助。这为我解决了。希望对你也有用。

【讨论】:

【参考方案3】:

这个:

[myDict objectForKey:[keys objectAtIndex:i]];

返回的是NSArray,而不是NSString

【讨论】:

以上是关于-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x145ecca0的主要内容,如果未能解决你的问题,请参考以下文章

执行 segue 时出错:-[UITextField 长度]:无法识别的选择器发送到实例 [关闭]

颤振flutter_webview_plugin错误[NSNull长度]:无法识别的选择器发送到ios上的实例

使用 MyAppDelegate 时无法识别的选择器

NSMutableArray addObject,无法识别的选择器

UITableViewController 无法识别的选择器发送到实例

无法识别的选择器...错误IOS [关闭]