Iphone UITableview单元格的NSMutable数组数据源
我有一个UITableview,我使用了一个NSMutable字符串数组作为数据源,然后它就可以正常工作了。但现在我想在这个数组中添加另一个字符串,点击上面的按钮,但一旦我点击按钮,应用程序就会崩溃并给出 “NSInvalidArgumentException”,原因:“-[NSCFString计数]:发送到实例0x4e11cf0的选择器无法识别” 我怎样才能做到这一点我的表视图如下请帮助我Iphone UITableview单元格的NSMutable数组数据源,iphone,ios,xcode,nsmutablearray,Iphone,Ios,Xcode,Nsmutablearray,我有一个UITableview,我使用了一个NSMutable字符串数组作为数据源,然后它就可以正常工作了。但现在我想在这个数组中添加另一个字符串,点击上面的按钮,但一旦我点击按钮,应用程序就会崩溃并给出 “NSInvalidArgumentException”,原因:“-[NSCFString计数]:发送到实例0x4e11cf0的选择器无法识别” 我怎样才能做到这一点我的表视图如下请帮助我 NSString *myMessage=messageField.text; [messageArray
NSString *myMessage=messageField.text;
[messageArray addObject:myMessage]];
messageContentArray=[[NSMutableArray alloc] initWithArray:messageArray];
[_tableView reloadData];
我永远不会对您的数据源使用NSMutableArray 我只想做以下事情:(messageContentArray现在是NSArray,因此是不可变的)
这个错误说明的一点是,您正在尝试从NSString获取计数……因此,请确保无论在何处调用计数,它都在NSArray上,而不是在不实现此方法的NSString上。我永远不会将NSMutableArray用于您的数据源 我只想做以下事情:(messageContentArray现在是NSArray,因此是不可变的)
此错误说明的一点是,您正在尝试从NSString获取计数……因此,请确保无论在何处调用计数,它都在NSArray上,而不是在未实现此方法的NSString上。
UITableView
的dataSource
不是一个数组,而是一个对象(最常见的是UIViewController
),它实现了UITableViewDataSource
协议。下面是UITableView
的dataSource
不是数组,而是对象(最常见的是UIViewController
),它实现了UITableViewDataSource
协议。下面是.如果您的数据源数组是messageContentArray并且已经实例化,那么您可以简单地执行此操作
NSString *myMessage=messageField.text;
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:messageArray];
[tempArray addObject:myMessage];
self.messageContentArray = [NSArray arrayWithArray:tempArray];
[_tableView reloadData];
如果您的数据源数组是messageContentArray并且已经实例化,那么您可以简单地执行此操作
NSString *myMessage=messageField.text;
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:messageArray];
[tempArray addObject:myMessage];
self.messageContentArray = [NSArray arrayWithArray:tempArray];
[_tableView reloadData];
messageArray
从哪里来?您使用哪个数组来确定显示多少行?您从哪个数组读取单元格文本?messageArray是一个字符串。InitWithArray接受一个数组。这是您的崩溃。称它为messageString,这样您就不会感到困惑。对不起,误读了您的代码段。请发布您的日志数据源方法-numberOfRows和cellForRow.messageArray
从何而来?您使用哪个数组来确定显示多少行?您从哪个数组中读取以获取单元格文本?Message数组是一个字符串。InitWithArray接受一个数组。这是您的崩溃。请将其称为messageString,以免混淆。抱歉。误读了您的代码片段。请发布您的数据源方法-numberOfRows和cellForRow。为什么您永远不会使用NSMutableArray作为数据源?似乎比每次都构建一个重复的数组更好。在所有的书籍和文献中,我读到没有人使用NSMutableArray作为数据源…我想当Jeff LaMarche不使用我的数据源时t我也不使用它。有了NSArray,你肯定会得到什么,有了NSMutableArray,你就可以改变你的状态,我认为这不好…@Ladislav,如果你知道你在做什么,NSMutableArray在你的状态下不会改变…毕竟你是控制它的人。@Daniel,我知道不会,但制造mis还是容易得多以immutable array为例。如果不止一个人使用您的代码,其他人可能会为您犯这样的错误:)我想说,当您需要在任何时候向DataSource添加任何内容时不断更新NSArray时,犯错误要容易得多。更不用说不断复制和创建新阵列的开销了为什么从不将NSMutableArray用作数据源?似乎比每次都构建一个重复的数组更好。在所有的书籍和文献中,我读到没有人使用NSMutableArray作为数据源……我认为当Jeff LaMarche不使用它时,我也不会使用它。有了NSArray,你肯定会得到什么,有了NSMutableArray,你就可以改变,我认为这不好…@Ladislav,如果你知道你在做什么,NSMutableArray不会改变…毕竟你是控制它的人。@Daniel,我知道它不会改变,但仍然比使用不可变数组更容易出错。如果不止一个人使用您的代码,其他人可能会为您犯这样的错误:)我想说,当您需要在任何时候向DataSource添加任何内容时不断更新NSArray时,犯错误要容易得多。更不用说不断复制和创建新阵列的开销了,他指的是支持数据源的数据结构。他指的是支持数据源的数据结构。您需要返回表视图:numberofrowsinssection:
方法。您需要返回表视图:numberofrowsinssection:
方法。
- (IBAction)clicked:(id)sender {
NSString *myMessage = messageField.text;
[messageContentArray addObject:myMessage];
[_tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)_tableView numberOfRowsInSection:(NSInteger)section
{
return [messageContentArray count];
}
// 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] autorelease];
}
NSString *str = [messageContentArray objectAtIndex:indexPath.row];
[cell.textLabel str];
return cell;
}