#iphone #ios #uitableview
#iPhone #iOS #uitableview
Вопрос:
Я разрабатываю приложение на основе ГИС, и я организовал данные для пользователя для поиска в разных категориях. Я расположил их в виде простого UITableView. Теперь у каждой категории есть соответствующая строка идентификатора (например: больницы категории имеют идентификатор: f556682-de5tgh4dde-ff478).Я создал два массива: один, который содержит категории, и один, который содержит строки идентификаторов.Я думаю, что привязка строки идентификатора к каждой категории должна выполняться с помощью NSMutableDictionary, но не уверен, как это сделать и как создать строку, которая создается динамически каждый раз, когда пользователь выбирает определенное количество строк, и является результатом конкатенации строк идентификаторов выбранных ячеек? Мне нужно, чтобы эта строка была передана на сервер, который в зависимости от строки создает файлы KML «на лету».(Причина, по которой мне это нужно.) Это код, который я делал до сих пор:
NSDictionary *dictionary = [gisCategoryID objectAtIndex:indexPath.row];//gisCategoryID is an array that holds the ID strings
NSLog(@"ID %@", [dictionary objectForKey: @"ID");
NSLog(@"Name %@", [dictionary objectForKey: @"Name");
NSMutableString *categString = [[[NSMutableString alloc] init] autorelease];
for (NSMutableDictionary *categInfo in dictionary)
[categString appendFormat: @"%@amp;", [categInfo objectForKey:@"ID"]];
У меня есть сомнения в том, что это правильный путь, потому что каждый раз, когда я выбираю строку, приложение вылетает.
Ответ №1:
// create a new mutable dictionary from two NSArrays which hold NSStrings: iDArray and categoryArray
// these arrays already exist and contain NSStrings and have the same number of items.
NSMutableDictionary * myDictionary = [[NSMutableDictionary alloc] initWithCapacity:25];
int i = 0;
for (i = 0; i < [iDArray count]; i ) {
[myDictionary addObject:[categoryArray objectAtIndex:i] forKey:[iDArray objectAtIndex:i]];
}
Комментарии:
1. Во-первых, большое вам спасибо за ваше время. Во-вторых, я понимаю, что вы говорите, и я попробовал ваш код. Приложение больше не зависает, поэтому все должно быть в порядке. Кроме того, чтобы соединить строки вместе, я включил это в цикл for:
NSMutableString *categString = [[[NSMutableString alloc] init] autorelease]; for (NSMutableDictionary *categInfo in dictionary) [categString appendFormat: @"%@amp;", [categInfo objectForKey:[iDArray objectAtIndex:i]]];
я думаю, это должно быть правильно.2. Для меня ваше решение выглядит нормально, поэтому я принимаю ваш ответ.
Ответ №2:
Вы говорите, что хотите объединить строки, но вам нужно использовать словарь, который связывает с ними ключевую строку? В любом случае, выбранные ячейки возвращаются в виде массива с использованием indexPathsForSelectedRows , так что вы можете найти, какие из них. И для динамического создания строки вы могли бы сделать что-то вроде:
NSString * concatString = @"";
for (NSString* onestr in myArrayofString) {
concatString = [NSString stringWithFormat:@"%@%@",concatString, onestr];
}
Комментарии:
1. Да, но это работает для конкатенации строк массива, как это сделать при использовании словаря? Я делаю это неправильно? Я обновляю вопрос с помощью кода, который я сделал.
2. Во-первых, объект в пути к индексу.строка словарь? Поместите точку останова в первую строку кода и непосредственно перед ее выполнением введите «po [gisCategoryID objectAtIndex:indexPath.row]» в отладчик. Это, по крайней мере, подскажет вам, что это за объект. Во-вторых, то, что вы определяете categorinfo как изменяемый, не делает его таковым. И не похоже, что вы меняете словарь, так зачем вообще делать его изменяемым? В вашем коде отсутствует много кода, и трудно сказать, что вы пытаетесь сделать.
3. Ну, теперь, когда вы упомянули об этом, categorinfo не должен быть изменяемым. Итак, я создам просто массив. Я ввел то, что вы сказали, в отладчике, и его тип представляет собой массив символов. Но как, по-вашему, можно сделать то, что мне нужно, надлежащим образом, чтобы присвоить ИДЕНТИФИКАТОР каждой строке / ячейке?
4. ОК. Итак, каждый объект, хранящийся в gisCategoryID, представляет собой массив символов? Однако вместо этого вы присваиваете его переменной, которая, по мнению компилятора, содержит NSDictionary . Это одна из причин сбоя, компьютер думает, что у него есть NSDictionary, а на самом деле это массив символов.
5. Сложно понять, что вы делаете, но я собираюсь добавить некоторый код, который позволит вам создать словарь и добавить к нему что-то в следующем ответе.