如何将值插入 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.row
或indexPath.section
。如果您的数组中没有值,则问题可能是您在开始添加对象时尚未初始化它,然后调用类似
tableData = [[NSMutableArray alloc] initWithCapacity:20]
但这纯粹是根据所提供的细节进行的推测。
就 tableView 滚动问题而言,如果您的数组包含 20 个对象,则索引 [0...19] 是对象。如果numberOfRowsInSection:
中的表视图返回类似tableData.count + 1
的内容,则最后一行的索引处将没有数据。
【讨论】:
以上是关于如何将值插入 NSMutableArray? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章