Цель - C: объединить несколько массивов строк - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть несколько массивов NSString, которые я хотел бы объединить в один массив на основе пользовательских предпочтений.

Созданы массивы:

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'

Спасибо за вашепомощь.

Ответы [ 4 ]

1 голос
/ 23 ноября 2011

Уммммм, попробуйте этот код вместо

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 голос
/ 23 ноября 2011

Ваша основная проблема в том, что вы путаете две разные вещи, называемые «массивами».У вас есть массивы 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];
}

Вы хотите убедиться, что вы правильно управляете своей памятью здесь илипротечет как сумасшедший.Обычно лучше, чтобы объекты принадлежали к какому-либо классу, поэтому вы можете использовать сеттеры, а не управлять памятью вместо того, чтобы хранить их в глобальных или статических переменных.

0 голосов
/ 23 ноября 2011

Вы используете массив C, который содержит объекты NSString. Идея такова:

*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 с этим.

0 голосов
/ 23 ноября 2011

NSString не является массивом, существует проблема терминологии.

NSString s являются объектами, поэтому для создания строки NSSt из статического текста:

NSString *string1 = @"the text";

Для объединения строкиспользуйте метод, найденный в NSString.

Чтобы добавить строку в строку 3 (которая является NSMutableString):

[string3 appendString: string2];

«Метод экземпляра -arrayByAddingObjectsInArry: не найден» означает, что нетметод с именем -arrayByAddingObjectsInArry: как часть класса NSString, поскольку это экземпляр класса, которому вы отправляете сообщение.(Да, есть тип, но это не проблема).

Рассмотрите возможность просмотра документации NSString во вкладке «Документация» окна Xcode Organizer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...