Обычно это означает, что вы пытаетесь получить доступ к уже выпущенной переменной. Судя по тому, как вы обращаетесь к ивару напрямую (не через геттеры), это говорит о том, что вы делаете все управление памятью самостоятельно, что может быть непросто, чтобы всегда получить право.
В этой строке, где вы устанавливаете массив, вы получаете автоматически выпущенный массив
basic = [NSArray arrayWithObjects:projID, projStat, appDate, closeDate,countryName,regionName,envCatCode,teamLeader,borrower,impAgency,totalCost,comtAmt, nil];
Скорее всего, оно исчезнет к тому времени, когда вы попытаетесь получить к нему доступ. Вам нужно добавить сохранение или не использовать метод автоматического выпуска
1
// The preferred way in this instance
basic = [[NSArray alloc] initWithObjects:projID, projStat, appDate, closeDate,countryName,regionName,envCatCode,teamLeader,borrower,impAgency,totalCost,comtAmt, nil];
2
// Not the best way
basic = [[NSArray arrayWithObjects:projID, projStat, appDate, closeDate,countryName,regionName,envCatCode,teamLeader,borrower,impAgency,totalCost,comtAmt, nil] retain];
В любом случае это может быть удобно, чтобы прочитать об управлении вашей памятью.
Гораздо проще использовать синтезированные геттеры / сеттеры для свойств и не получать прямой доступ к ивару, если вы действительно не хотите любить методы init
и dealloc
.
Другая проблема, которую я вижу (не связанная с падением), заключается в том, что вы не инициализировали number
ни для чего, и вы не установили его в случае default
в операторе switch, это может быть причиной ошибки, которая сложно отследить позже.