Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableview单元格的NSMutable数组数据源_Iphone_Ios_Xcode_Nsmutablearray - Fatal编程技术网

Iphone UITableview单元格的NSMutable数组数据源

Iphone UITableview单元格的NSMutable数组数据源,iphone,ios,xcode,nsmutablearray,Iphone,Ios,Xcode,Nsmutablearray,我有一个UITableview,我使用了一个NSMutable字符串数组作为数据源,然后它就可以正常工作了。但现在我想在这个数组中添加另一个字符串,点击上面的按钮,但一旦我点击按钮,应用程序就会崩溃并给出 “NSInvalidArgumentException”,原因:“-[NSCFString计数]:发送到实例0x4e11cf0的选择器无法识别” 我怎样才能做到这一点我的表视图如下请帮助我 NSString *myMessage=messageField.text; [messageArray

我有一个UITableview,我使用了一个NSMutable字符串数组作为数据源,然后它就可以正常工作了。但现在我想在这个数组中添加另一个字符串,点击上面的按钮,但一旦我点击按钮,应用程序就会崩溃并给出

“NSInvalidArgumentException”,原因:“-[NSCFString计数]:发送到实例0x4e11cf0的选择器无法识别”

我怎样才能做到这一点我的表视图如下请帮助我

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;
}