Кадр в темноте - Ошибка приложения


0

Хорошо, так что это будет немного выстрелом в темноте, если вы не сможете увидеть мое приложение!

У меня есть ошибка. У меня класс SwimmingPool, мое приложение передает пул из таблицы в подробный вид, где вы можете увидеть все поля класса swimmingPool. Затем вы можете щелкнуть по отдельной детали, отредактировать ее и сохранить. «Оригинальный» пул копируется и передается контроллеру представления, ответственному за внесение изменений. Если пользователь нажимает сохранить, поля копируются из копии в «оригинал»

switch (self.sectionFromParentTable) { 
    case KNameIndex: 
     self.thePoolFacility.name = self.thePoolFacilityCopy.name; 
     self.thePoolFacility.type = self.thePoolFacilityCopy.type; 
     break; 

    case KAddressIndex: 
     self.thePoolFacility.address = self.thePoolFacilityCopy.address; 
     break; 

    case KPhoneNumberIndex: 
     self.thePoolFacility.phoneNumber = self.thePoolFacilityCopy.phoneNumber; 
     break; 

    case KWebAddressIndex: 
     self.thePoolFacility.webAddress = self.thePoolFacilityCopy.webAddress;   
     break; 
    case KPricesIndex: 
     self.thePoolFacility.prices = self.thePoolFacilityCopy.prices; 
     break; 
    case KPoolIndex: 
     self.thePoolFacility.pools = self.thePoolFacilityCopy.pools; 
    default: 
     break; 
} 

[self.navigationController popViewControllerAnimated:YES]; 

Могу ли я иметь некоторые предположения на жуке, который делает следующее:

  1. Результатов ошибок в изменениях done для полей класса, которые не сохраняются. В частности, класс, называемый TimeEntry, в изменяемом массиве, названном понедельником в словаре под названием TermTimes в классе, называемом пулом, а затем в изменяемом массиве под названием Pools.

  2. Это случайный случай. Иногда это работает отлично. Иногда это нет! Я не могу воссоздать ошибку, , только если мне повезет, я могу получить ее не для сохранения. Моя догадка может быть с учетом времени. Например, если я , введите расписание для пула времени открытия, если я быстро добавлю несколько записей и сохраните их, как правило, отлично работает. Если я заполню целый график , тогда он больше, чем не не сохраняет.

  3. Приложение не падает.

Это бесит попытка и отладка ошибки, которая, как представляется, происходит случайным образом. Любые намеки на такую ​​эпическую охоту за ошибками?

0

«random» и «hard to reproduce» заставляет меня думать, что это проблема, связанная с многопоточным. Условия гонки очень трудно воспроизвести и отладить. Вам нужно убедиться, что у вас есть эксклюзивные права на ресурсы, необходимые для выполнения этой операции.

  0

Извините, ребята, я не знаю многопоточности. Я делаю приложение iphone и специально не включил многопоточность 21 фев. 092009-02-21 22:42:48


2

Один из лучших способов решения этой проблемы (где она, по-видимому, не может быть воспроизведена надежно) заключается в том, чтобы вставить код регистрации в различных областях, где вы ожидаете, что некоторые вещи будут происходить. Лог помещает ошибки, которые могут возникнуть, регистрировать ожидаемые значения и то, что у вас есть, и т. Д. Затем попробуйте, попробуйте, попробуйте, пока не сможете воспроизвести ошибку.

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

Надеюсь, это приведет к новым гипотезам о том, как происходит ошибка, и вы сможете надежно воспроизвести ее под отладчиком и исправить ее!

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


0

Мое предложение - искать ниль. Любой вызов метода на объекте nil просто ничего не делает и возвращает nil, поэтому в любое время, когда вы ожидаете, что метод будет вызван, а это не так, вы должны его искать. (.foo = то же самое, что и setFoo :, так что ноль.foo = 1; ничего не сделает.)


0

Спасибо за все ваши ответы. Теперь это исправлено.

Для тех, кого это касается, я забыл добавить celliateifer в XIB моего подкласса ячейки.

cellForRow: способ был поэтому создание новый cell каждый раз. Память наполнилась очень быстро. Казалось, что мое приложение автоматически пытается вырезать жир, вытесняя другой tableView из режима редактирования и не управляя моими экземплярами должным образом.

Снова это проблема с памятью. Разве это не всегда так!

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