我知道这些说明都是关于如何在 Objective c 中读取 .csv 文件然后将其传递给 NSMuatbleArray 的,但是当我将其分配给 mutableArray 时,我遇到了问题。我花了几个小时在线检查并尝试修复它,但没有任何帮助。
这是我的目标c代码:
NSError *err;
NSString *filePath = [NSString stringWithContentsOfFile:@"/users/Mike/Desktop/Book1.csv" encoding:NSUTF8StringEncoding error:&err];
NSString *replace = [filePath stringByReplacingOccurrencesOfString:@"\"" withString:@""];
NSString *something = [replace stringByReplacingOccurrencesOfString:@"," withString:@"\n"];
NSMutableArray *columns = [[NSMutableArray alloc] initWithObjects:[something componentsSeparatedByString:@"\n"], nil];
NSLog(@"%@", filePath);
NSLog(@"%@", something);
NSLog(@"%@", columns);
这是输出:
My App[1854:54976] Kitchen,Bathroom,Dinning Room,Living Room
My App[1854:54976] Kitchen
Bathroom
Dinning Room
Living Room
My App[1854:54976] (
(
Kitchen,
Bathroom,
"Dinning Room",
"Living Room"
)
)
问题是数组的输出带有我删除的逗号和引号。
我需要的是数组“列”像字符串“something”一样出现。
更新
我拿走了“replace”和“something”这两个字符串,将数组切换为:
columns = [[NSMutableArray alloc] initWithObjects:[filePath componentsSeparatedByString:@","], nil];
现在我无法将其加载到表视图中。这是我的代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"firstCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.textLabel.text = [columns objectAtIndex:indexPath.row];
return cell;
}
该应用程序只是因无法解释的原因而崩溃,但是当我手动创建另一个数组时,它可以工作。
这个有效:
NSMutableArrayrow = [[NSMutableArray alloc] initWithObjects:@"First", @"Second", nil];
您的代码有点混乱,并且包含一个错误,该错误是导致您无法解释的括号的原因。
initWithObjects
想要一个
以逗号分隔的对象集,然后是 nil。你正在传递它
数组和零。所以你得到的结果是一个可变的
包含单个对象的数组,即不可变数组。这是
几乎可以肯定不是你想要的。这一行:
NSMutableArray *columns =
[[NSMutableArray alloc] initWithObjects:
[something componentsSeparatedByString:@"\n"], nil];
...错了。
您可以像这样使用 initWithObjects :
NSMutableArray *columns =
[[NSMutableArray alloc] initWithObjects: @"one", @"two", @"three", nil];
请注意我如何传递一个以逗号分隔的对象列表,然后传递一个 nil。您对 initWithObjects 的使用是传入一个对象、一个数组,然后传入一个 nil。您不会获得包含源数组中的对象的可变数组 - 您将获得包含起始不可变数组的可变数组。
应该这样写:
NSMutableArray *columns = [[something componentsSeparatedByString:@"\n"]
mutableCopy];
或者更好的是,分两步完成,这样就清楚发生了什么:
NSArray *tempArray = [something componentsSeparatedByString:@"\n"];
NSMutableArray *columns = [tempArray mutableCopy];