2016-03-03 2 views
-3

Существует табличный вид, в котором есть список вещей. Пользователь может выбрать несколько строк в этой таблице. Я храню каждый в массиве.Работа с несколькими объектами в NSArray

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

Вот то, что я пробовал:

for (NSString *str in self.myArray) { 
     if ([str isEqual:@"Blah"]) { 
      self.blahString = str; 
     } else { 
      self.blahString = @""; 
     } 

     if ([str isEqual:@"Blah Blah"]) { 
      self.blahblahString = str; 
     } else { 
      self.blahblahString = @""; 
     } 

     if ([str isEqual:@"Blah Blah Blah"]) { 
      self.blahblahblahString = str; 
     } else { 
      self.blahblahblahString = @""; 
     } 
} 

if (self.myArray.count == 0) { 
    [self.answersToPass setObject:@"" forKey:@"Blah"]; 
    [self.answersToPass setObject:@"" forKey:@"Blah Blah"]; 
    [self.answersToPass setObject:@"" forKey:@"Blah Blah Blah"]; 
} else { 
    [self.answersToPass setObject:self.blahString forKey:@"Blah"]; 
    [self.answersToPass setObject:self.blahblahString forKey:@"Blah Blah"]; 
    [self.answersToPass setObject:self.blahblahblahString forKey:@"Blah Blah Blah"]; 
} 

Цель здесь, если пользователь ничего не выбрать, а затем просто установить каждый objectForKey в пустую строку, иначе вытащить каждую строку и сопоставить его это правый ключ.

EDIT:

Я считаю, что решить мою проблему. Я полностью поцарапал вышеуказанный код.

Я нашел ошибку «порядка операции» на моем конце. Полностью моя вина. Должен был более внимательно изучить мой код.

Если у меня возникнут проблемы с этим, я обновлю сообщение здесь.

Я ценю вклад каждого и помощь. Приношу свои извинения за то, что я недостаточно подробно разбираюсь в своем вопросе.

+0

, когда цикл завершен, конечно, строка будет содержать последнее значение в массиве. Если вы хотите вытащить каждую строку, вам нужно сохранить строку для итерации evrry. Но что вы пытаетесь сделать? –

+0

Мне нужно сохранить каждую строку. Они относятся к ответам, которые необходимо отправить в базу данных. Любые советы о том, как хранить каждый раз, будут полезны. Все, что я пробовал, не сработало. –

+0

Можете ли вы показать, что вы пробовали? u означает, что вы хотите сохранить строку в базе данных для каждой итерации? –

ответ

0

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

1) Похоже, вы все время проверяете, если пользователь что-то выбрал. Зачем? Это ужасная идея. Вместо этого add a responder to change stuff, когда пользователь действительно что-то делает.

2) Эта настройка вручную невелика - что, если когда-нибудь вы захотите иметь 500 разных предметов? Вы собираетесь вводить вручную каждый оператор if?

Попробуйте что-нибудь подобное.

for (NSString *string in self.myArray) 
{ 
    if (self.answersToPass[string]) 
     [self.answersToPass setObject: string forKey:string]; 
    for (id key in self.answersToPass) 
     if (key isEqualToString:(string)) 
      [self.answersToPass setObject: string forKey:key]; 
     else [self.answersToPass setObject: "" forKey:key]; 
} 

Пожалуйста, обратите внимание, что выше не тестировался, так что вы, возможно, придется исправить некоторые ошибки с моей OBJ гр нотации или что-то, но он должен показать правильную идею.

Я хотел бы отметить, что эта базовая структура бита со строками, равными друг другу, звучит очень глупо. Зачем хранить ключ и значение, равное или где значение равно null, а затем проверять каждый раз? Не было бы проще просто держать массив булевых элементов? Или карта строк для булевых точек?

+0

Приведенный выше код запускается, когда пользователь нажимает кнопку. Я проверяю, когда ячейка выбрана для проверки и снятия флажка. Некоторые из клавиш немного отличаются от того, что указано как название ячейки. Что касается последнего момента, я могу попытаться заставить их изменить это, но я не кодирую какую-либо логику на стороне сервера. –

+0

*** Завершение приложения из-за неотображенного исключения «NSGenericException», причина: «*** Коллекция <__ NSDictionaryM: 0x1571bd510> была мутирована при перечислении». –

+0

Возможно, вам придется сделать копию, отредактировать копию, а затем повесить оригинал, чтобы быть копией. Дело в том, что логика - это не сам код. Есть мои более простые способы проверить и снять флажки. –

0

В качестве свойства лучше определить структуру данных (например, NSMutableArray или NSMutableDictionary) и сохранить в ней строку, чтобы вы могли получить к ней доступ позднее.

@property (nonatomic, strong) NSMutableArray *array; 
for (NSString *str in self.myArray) { 
[array addObject str]; 
}