我有多个NSString Arrays,我想根据用户偏好将它组合成一个数组。
创建数组:
static const NSString *string1[] =
{...};
static const NSString *string2[] =
{...};
static NSMutableString *string3[] =
{
};
String3是保持数组,其中添加了所有用户的选择。有8种不同的字符串可以打开或关闭,因此有相当多的可能组合。我尝试过很多没有成功的事情。例如:
*string3=[string3 arrayByAddingObjectsInArray:string 2];
这会发出警告:
Instance method '-arrayByAddingObjectsInArry:' not found (return type defaults to 'id')
和
Receiver type 'NSMutableString **' is not 'id' or interface pointer, consider casting it to 'id'
感谢您的帮助。
答案 0 :(得分:1)
Ummmmm尝试使用此代码
NSArray *array1 = [NSArray arrayWithObjects:@"Wow", @" that", nil];
NSArray *array2 = [NSArray arrayWithObjects:@" is", @" really", nil];
NSArray *array3 = [NSArray arrayWithObjects:@" terrible", @" code", nil];
NSArray *fullArray = [array1 arrayByAddingObjectsInArray:[array2 arrayByAddingObjectsInArray:array3]];
NSLog(@"%@", fullArray);
您上面遇到的问题是因为您尝试在没有定义该方法的类上使用arrayByAddingObjectsInArray:
。 NSArray
是使用该方法的类,因此您需要NSArray
的实例才能像上面的代码一样使用arrayByAddingObjectsInArray
。
答案 1 :(得分:1)
你的基本问题是你混淆了两个叫做“阵列”的东西。你有的是C数组 - 它们不是对象,因此你不能向它们发送消息(例如arrayByAddingObjectsInArray:
)。您想要的是NSArray。
将它们全部声明为NSArray *strings1, *strings2, *strings3
,然后编写一些方法来初始化它们,如下所示:
+ (id)createArrays {
strings1 = [[NSArray alloc] initWithObjects:@"Something", @"Something else", nil];
strings2 = [[NSArray alloc] initWithObjects:@"Yet another thing", nil];
strings3 = [[strings1 arrayByAddingObjectsFromArray:strings2] retain];
}
你需要确保在这里正确管理你的记忆,否则你会像疯了一样泄漏。让对象属于某个类通常会更好,因此您可以使用setter而不是管理内存,而不是将它们存储在全局变量或静态变量中。
答案 2 :(得分:0)
NSString
不是数组,存在术语问题。
NSString
是对象,因此要从静态文本创建NSString:
NSString *string1 = @"the text";
要组合字符串,请使用NSString下的方法。
将字符串添加到字符串3(NSMutableString):
[string3 appendString: string2];
“未找到实例方法-arrayByAddingObjectsInArry:
”表示没有名为-arrayByAddingObjectsInArry:
的方法作为NSString
类的一部分,因为这是您要向其发送消息的类实例。 (是的,有一种类型,但这不是问题)。
考虑浏览Xcode Organizer窗口的“文档”选项卡中的NSString
文档。
答案 3 :(得分:0)
您正在使用包含NSString对象的C数组。这个想法是:
*string3 = malloc(sizeof(NSString*) * count); // Array of count strings
string3[0] = string1[0]; // Put on at index 0
NSLog(@"%@", string1[0]); // Log string at index 0
“count”是“string1”加上“string2”的总和。
你可以用这个做一个for循环。