Хобрук: Ваш путь к мастерству в программировании

Найдите объект в NSMutableArray и измените значение для этого объекта.

У меня есть проект, в котором пользователь может добавить некоторые элементы в TableView. Моим источником данных для этого TableView являются объекты с двумя свойствами NSString * nameOfItem и NSNumber * numberOfItem. Есть ли возможность проверить мой NSMutableArray, если он содержит строку @"someString" в качестве свойства nameOfItem и если да, то изменить numberOfItem +1 ?

ОБНОВЛЕНИЕ:

Я пытаюсь сделать это с помощью for(...in...), но это работает только тогда, когда у меня есть только один объект в моем NSMutableArray. Если у меня есть больше объектов, он создает один новый объект, а затем меняет значение на ++ на старом:

введите здесь описание изображения

Вот код, который я пробовал:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSString*nameToCheck = [NSString stringWithFormat:@"%@", [self.ivc.objects objectAtIndex:indexPath.row]];
for (Items *itemNamed in self.ivc.shoppingList.items) {
     if ([itemNamed.nameOfItem isEqualToString:nameToCheck]) {
         [itemNamed setNumberOfItem:[NSNumber numberWithInt:[itemNamed.numberOfItem integerValue]+1.0]];
} else {
                Items *item = [Items new];
                [item setNameOfItem:name];
                [item setNumberOfItem:@(1)];
                [self.ivc.shoppingList.items insertObject:item atIndex:0];
}

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


  • Какой результат дает этот код? 05.09.2014
  • @rdelmar, если у меня есть только один объект в этом shoppingList.items, тогда он меняет значение numberOfItem ++ 05.09.2014
  • Какова структура списка покупок? Из вашего сообщения неясно, почему вы перебираете self.ivc.shoppingList.items, а не self.ivc.shoppingList. 05.09.2014
  • @rdelmar, self.ivc.shoppingList — это NSObject со свойством 3. одним из свойств является NSMutableArray * items. в этом массиве у меня есть мои элементы. Это похоже на модель Core-Data с отношениями shoppingList‹--››Items. 05.09.2014
  • Я попробовал модифицированную версию вашего кода, и она отлично сработала для меня. Я не вижу причин, по которым цикл по массиву будет работать, когда счетчик массива равен 1, но не для большего числа. Что происходит, когда у вас есть более одного объекта? Ничего такого? 05.09.2014
  • @rdelmar, если у меня есть больше объектов, он зацикливается для каждого объекта, поэтому, если у меня есть объект с другим nameOfItem, он делает еще = создает новый. Это то, что я хочу. Если я хочу добавить Apple и его нет в списке, он будет добавлен, если он есть в списке, он изменит значение на 2. 05.09.2014
  • Давайте продолжим обсуждение в чате. 05.09.2014

Ответы:


1

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

05.09.2014
  • @lulian Popescu, извините, я не хочу искать ключ только для строки, сохраненной как свойство nameOfItem в объекте Item :) 05.09.2014
  • Я думаю, что обнаружил небольшую ошибку в вашем коде (извините, если я ошибаюсь). Когда вы проверяете, равны ли имена, вы проверяете itemNamed.nameOfItem с именем, и я думаю, что здесь должно быть nameToCheck 05.09.2014
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..