1

我有交流字符串,需要将其分成几行(此时我不会为它们制作一个 NSString)。有没有像 NSMutableArray 这样的东西,我可以把这个 char * 放进去?或者我怎样才能实现它从字符串中制作一些我以后可以通过索引访问的东西?

目前我做

char *cline = strtok(data, "\n");
            while(cline)
            {
...
}

或者当我从磁盘读取文件时更容易做到这一点?

4

3 回答 3

2

使用NSValue将您的 char* 存储在 NSMutableArray

概述

NSValue 对象是单个 C 或 Objective-C 数据项的简单容器。它可以保存任何标量类型,例如 int、float 和 char,以及指针、结构和对象 ID。此类的目的是允许将此类数据类型的项添加到集合中,例如 NSArray 和 NSSet 的实例,这要求它们的元素是对象。NSValue 对象总是不可变的。

于 2013-03-13T20:22:42.587 回答
1

你不能将 C/C++ 指针插入到 NSMutableArray 中,除非它被包装在像 NSValue 或其他 Objective-C 类这样的容器中。

如果你想要一个 NSMutableArray,将它转换为 NSString 会容易得多。

NSArray* strings = [[NSString initWithCString:data encoding:NSUTF8StringEncoding] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];

如果您严格地想留在 C/C++ 领域,您的其他选择是拥有一个字符串向量或一个 char* 数组。

于 2013-03-13T20:28:52.743 回答
1

正如其他人已经指出的那样,要将原始 C 类型(例如 a )存储在 Obj-C 对象(例如 的实例)中NSMutableArray,您需要首先将它们包装在NSValue对象中。

作为这样做的替代方案 - 如果您想在 Obj-C 中使用纯 C 字符串,请不要忘记您可以自由地将 C 与 Objective-C 源代码混合,因此使用普通 C 数组是一个完全合法的解决方案也。

通过将值包装到 obj-c 数组中,您可以获得边界检查和可变性,但如果您继续解开这些值以将它们作为 C 字符串处理,您可能最好坚持使用普通的旧 C 字符串开始,以节省开销。

如果你想创建一个 NSString,你可以简单地使用NSString便捷方法stringWithFormat:,如下所示:

char str[50];

// read characters into the buffer from a file...

// When done, convert to an NSString:
NSString *string = [NSString stringWithFormat:@"%s", str];
于 2013-03-20T02:11:24.833 回答