Nano Hash - криптовалюты, майнинг, программирование

NSMutableArray не сохраняет объекты, полученные из базы данных (основные данные)

У меня очень странная проблема, и она сводит меня с ума.

Senario — это приложение с локальной базой данных (основными данными), которое получает обновления с сервера, здесь я буду публиковать только наиболее актуальный код.

Этот код ниже вызывается перед началом загрузки обновления. Его цель — сохранить все записи в таблицу IMAGES, если у вас возникнут проблемы при загрузке данных для восстановления в таблицу.

//Passa contexto do ManagedObjectContext do appDelegate
     AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
     managedObjectContext = [appDelegate managedObjectContext];

    if ([SQLite count:managedObjectContext :@"IMAGENS"]!=0) {
        NSMutableArray *fetchResults = [SQLite select:managedObjectContext :@"IMAGENS" :NULL];

        oldImages = [[NSMutableArray alloc] initWithArray:[fetchResults copy]];

        NSLog(@"SALVOU OLD IMAGENS");

    }

Я проверил, действительно ли сохраняются тестовые данные корыта, пока проблем нет.

Этот другой код Trexo вызывается, если у вас возникли проблемы во время загрузки, и его цель - очистить таблицу и вставить объекты IMAGES, которые были сохранены в методе, который я разместил чуть выше..

   -(void)recoverImages{
        if ([oldImages count]!=0) {
            NSMutableArray *fetchResults = [SQLite select:managedObjectContext :@"IMAGENS" :NULL];

                //Se tiver Objetos salvos na tabela, todos serão apagados
                if ([fetchResults count]!=0) {
                    for (Imagens *imagem in fetchResults) {
                        //Deleta objeto
                        [SQLite deletarImagem:managedObjectContext :imagem];
                        NSLog(@"deletou imagens no recover!");
                    }


                    for (Imagens *img in oldImages) {
                        Imagens *imagem = (Imagens *)[NSEntityDescription insertNewObjectForEntityForName:@"IMAGENS" inManagedObjectContext:managedObjectContext];

                       [imagem setCategoria:img.categoria];
                       [imagem setTitulo:img.titulo];
                       [imagem setDescricao:img.descricao];
                       [imagem setImagem:img.imagem];

                        NSError *er;
                        if(![managedObjectContext save:&er]){
                            NSLog(@"Houve um erro muito grave ao salvar imagem old");
                        }else{
                            NSLog(@"\nTítulo:%@",imagem.titulo);
                            NSLog(@"\nDescrição:%@",imagem.descricao);
                            NSLog(@"\nCategoria:%@",imagem.categoria);
                        }

                    }
            }
        }

    }

NSMutableArray не пуст, потому что он выполняется в первом тесте, а также входит во второй случай, однако для этого вывода

NSLog (@ "\ nTítulo:% @" imagem.titulo);
NSLog (@ "\ nDescription:% @" imagem.descricao);
NSLog (@ "\ nCategoria:% @" imagem.categoria);

Я получаю Null для всех объектов, как будто объекты уже не ее.

Наиболее распространенные ошибки при этом — это не инициализация NSMutableArray, а, как видите, инициализация.

Например, я тестировал сохранение данных в NSUserDefaults вместо var, но возникла та же проблема.

Забыл упомянуть, что oldImages NSMutableArray является переменной экземпляра.

Вы видите какие-то проблемы?

ПРИМЕЧАНИЕ. Класс SQLite — это класс, который я написал, содержащий некоторые функции для упрощения взаимодействия с базой данных.

17.05.2013

  • В imagem = img; определенно есть проблема: вы переписываете указатель на вновь созданный объект другим указателем. Я пока не понимаю вашей логики, но, возможно, вам нужно вместо этого скопировать свойства img в imagem. 18.05.2013
  • Собственно тоже уже пробовал этот код [image setCategoria: img.categoria]; [изображение setTitulo: img.titulo]; [описание набора изображений: img.descricao]; [изображение набора изображений: img.imagem]; Но я получаю null в выводе отладки 18.05.2013
  • Откажитесь от класса SQLite и используйте стандартные базовые методы обработки данных. 18.05.2013
  • Я не понимаю, что вы имеете в виду, но в любом случае мне это не помогло ... И класс SQLite, который я написал, отлично работает, на самом деле внутри него есть стандартные методы, просто он более прост в использовании, вместо того, чтобы использовать 10 строк кода для рекурсивных данных , используйте только один. 20.05.2013

Ответы:


1

После того, как из-за этой проблемы было потеряно достаточно времени, я решил сохранить NSMutableArray вместо объекта (Images *), сохранить NSDictionaty с вашей информацией следующим образом:

oldImages = [[NSMutableArray alloc] init];

        for (Imagens *img in fetchResults) {
            if (img) {
                NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:img.categoria,@"categoria",img.titulo,@"titulo",img.descricao,@"descricao",img.imagem,@"imagem", nil];

                [oldImages addObject:dic];

            }
        }

а затем восстановить:

 for (NSDictionary *img in oldImages) {
                Imagens *imagem = (Imagens *)[NSEntityDescription insertNewObjectForEntityForName:@"IMAGENS" inManagedObjectContext:managedObjectContext];

                [imagem setCategoria:[img valueForKey:@"categoria"]];
                [imagem setTitulo:[img valueForKey:@"titulo"]];
                [imagem setDescricao:[img valueForKey:@"descricao"]];
                [imagem setImagem:[img valueForKey:@"imagem"]];

                NSError *er;
                if(![managedObjectContext save:&er]){
                    NSLog(@"Houve um erro muito grave ao salvar imagem old");
                }else{
                    NSLog(@"\nTítulo:%@",[img valueForKey:@"titulo"]);
                    NSLog(@"\nDescrição:%@",[img valueForKey:@"descricao"]);
                    NSLog(@"\nCategoria:%@",[img valueForKey:@"categoria"]);
                }

            }

по какой-то причине не сохраняет мои объекты NSMutableArray (изображения *), это как-то связано с наследованием класса NSManageObject?

19.05.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..