如何将值插入 NSMutableArray? [关闭]

Posted

技术标签:

【中文标题】如何将值插入 NSMutableArray? [关闭]【英文标题】:How to insert an value into a NSMutableArray? [closed] 【发布时间】:2014-01-22 16:10:18 【问题描述】:

我知道我的问题听起来很愚蠢,但它不适用于我的代码:

#import "TermineViewController.h"
#import "DetailViewController.h"

@interface TermineViewController ()

@end

@implementation TermineViewController   
    NSArray *tableData;
    int i;
    NSString *userid;
    NSString *selection;
    NSMutableArray *userids;


- (id)initWithStyle:(UITableViewStyle)style

    self = [super initWithStyle:style];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];

    NSURL *url = [[NSURL alloc] initWithString: @"http://example.com"];
    NSString *dataString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    tableData = [dataString componentsSeparatedByString:@"--"];
    NSLog(userids);


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // Return the number of rows in the section.
    return ([tableData count])/4;


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView   
    return 1;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

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

    // Configure the cell...
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    cell.contentView.backgroundColor = [UIColor blackColor];
    cell.accessoryView.backgroundColor = [UIColor blackColor];
    [self.tableView setSeparatorColor:[UIColor whiteColor]];
    self.view.backgroundColor = [UIColor blackColor];

    //Declare all Labels
    UILabel *name = (UILabel *)[cell viewWithTag:100];
    UILabel *service = (UILabel *)[cell viewWithTag:200];
    UILabel *time = (UILabel *)[cell viewWithTag:300];

    //Write into Labels and add one to int i (declared in implementation)
        name.text = [tableData objectAtIndex:i];
    i++;
        service.text = [tableData objectAtIndex:i];
    i++;
        time.text = [tableData objectAtIndex:i];
    i++;
        userid = [tableData objectAtIndex:i];
        NSString *usrid = [NSString stringWithFormat:@"%@", userid];
        [userids addObject:usrid];
    i++;

    return cell;



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    selection = userids[indexPath.row];
    NSLog(@"User selected %@", selection);
    NSLog(userids[0]);


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    if ([segue.identifier isEqualToString:@"details"]) 
        DetailViewController *destViewController = (DetailViewController *)[segue destinationViewController];
        destViewController.userid = selection;
    



@end

所以,这里有两个问题:第一个是我的 NSMutableArray 中没有任何值(顺便说一句,它是在 @implementation 中声明的)。第二个是如果用户在 TableView 中滚动,我会收到以下错误消息:

由于未捕获的异常“NSRangeException”而终止应用程序,原因: '* -[__NSArrayM objectAtIndex:]:索引 20 超出范围 [0 .. 19]' * 首先抛出调用堆栈:[...]

不知道怎么回事?是的,我的数组中有 20 个值,但第 20 个存在!

非常感谢!!!!

你好,Kitzng

【问题讨论】:

Objective-C 中的数组是从 0 开始索引的,这意味着第一个元素的索引为 0,第 20 个元素的索引为 19。 检查- tableView:numberOfRowsInSection:是否返回[tableData count] 在此处粘贴您的函数 - tableView:numberOfRowsInSection: 代码。这样我们就可以检查了。 userid = [tableData objectAtIndex:i]:什么是“userid”、“tableData”和“i”? 我的 NSMutableArray 中没有任何值 -- 什么 NSMutableArray?? 【参考方案1】:

您不是在任何地方创建数组,您必须先执行 userids = [[NSMutableArray alloc] init] 才能使用它。

【讨论】:

谢谢,但如果我这样做,我会收到以下错误:[__NSArrayM length]: unrecognized selector sent to instance 0x8daaf70 2014-01-22 19:58:50.554 ControlAW[2509:a0b] * ** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x8daaf70” 在执行哪一行时得到那个错误?您在哪里添加了创建数组的调用? 我在准备视图时收到错误(所以直接在启动后),我在 viewDidLoad 方法中调用了它。有错吗? 您是否输入错误并执行 userid = [[NSMutableArray alloc] init] 而不是 userids = [[NSMutableArray alloc] init]。 不,我输入了 userids (userids = [[NSMutableArray alloc] init];)【参考方案2】:

在您的代码中,i 未定义。我猜你的意思是indexPath.rowindexPath.section。如果您的数组中没有值,则问题可能是您在开始添加对象时尚未初始化它,然后调用类似

tableData = [[NSMutableArray alloc] initWithCapacity:20]  

但这纯粹是根据所提供的细节进行的推测。

就 tableView 滚动问题而言,如果您的数组包含 20 个对象,则索引 [0...19] 是对象。如果numberOfRowsInSection: 中的表视图返回类似tableData.count + 1 的内容,则最后一行的索引处将没有数据。

【讨论】:

以上是关于如何将值插入 NSMutableArray? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSMutableArray 中插入新行?

如何使用 dbapi 将值列表插入 BigQuery 表

如何使用java变量将值插入mysql表?

无法将值 NULL 插入列 - 如何强制标识增加? [关闭]

如何将值插入外部 iframe 输入

如何将值插入到python中的嵌套表中?