Сбой установки избирательно в NSManagedObject - PullRequest
1 голос
/ 26 апреля 2011

У меня есть NSManagedObject, который я пытаюсь создать с заданными значениями.Я получаю доступ к установщикам следующим образом:

object.couchID = (NSString *)[dictObject objectForKey:@"_id"];

... и это прекрасно работает на моей машине, но мой партнер получает эту ошибку, когда запускает ее на своей машине:

'-[NSCFString type]: unrecognized selector sent to instance 0x4e465e0'

Около 90% сеттеров (все отформатированы одинаково) работают на компьютере моего партнера, но хорошие 10% терпят неудачу с этой ошибкой.Все они работают на моей машине.

Мы выполняем один и тот же код (согласно SVN (да, я знаю)) и извлекаем одни и те же данные с одного и того же сервера, поэтому кажется, что все вроде как должно работать.

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


Обновление 1: для этого разблокирован значок Tumbleweed ... угадайте, он слишком липкий для прикосновения?Любые мысли или догадки приветствуются.И, эй, вы можете заработать 50 баллов. *


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

Ответы [ 4 ]

1 голос
/ 06 мая 2011

Я столкнулся с чем-то похожим на работе на днях. Я подозреваю, что у одного из вас есть устаревший файл .momd внутри пакета приложения, и он не заменяется при обновлении. Я подозреваю, что это ошибка в Xcode 4, хотя я еще не полностью подтвердил это. Если ваш партнер полностью удаляет приложение и , то устанавливает приложение, ошибка исчезает?

0 голосов
/ 05 мая 2011

если этот код не работает на компьютере вашего партнера:

someManagedObject.couchID = @"some hardcoded string";

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

0 голосов
/ 06 мая 2011

У меня была почти такая же проблема при попытке нарисовать CATiledLayer с данными в NSManagedObjects. Каким должен быть действительный объект barfs с исключением «нераспознанный селектор»

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

После бесплодных попыток обойти это с помощью [NSManagedObjectContext lock] и сохранить контекст в новом потоке, я в конечном итоге просто бросил содержимое своей выборки в изменяемый набор, чтобы попытаться сохранить контроль над ним, который, кажется, работает на iOS, но не на OS X так хорошо.

Итак, пара возможностей

  • Вы делаете это не в основном нить и имеет ли МОС сохранить в этой теме. Проверьте документы для [NSManagedObjectContext lock]. Но по сути каждый поток, работающий с контекстом, должен сохранять свой контекст.
  • Попробуйте бросить его в контейнер пока ты оперируешь на нем. Сделай это немного липче. Извините, если это звучит как вуду, но это так.
0 голосов
/ 03 мая 2011

Вам может потребоваться создать временную переменную, значение которой object приведено к тому, что является фактическим классом, например,

MyClass *c = (MyClass *)object; // if object is in fact a MyClass instance
c.couchID = (NSString *)[dictObject objectForKey:@"_id"];

Я видел случаи, когда компилятор не мог совершить мысленный скачок и понять, что вашАтрибут - это класс, который вы знаете.Решение для меня в этих случаях должно было быть более явным.Имеет ли это смысл?Стоит хотя бы выстрел, нет?: -)

...