Приложение для моего iPhone продолжает получать ошибку BAD_EXC_ACCESS после запуска в течение некоторого времени, после мучительной отладки я обнаружил, что одна из моих статических переменных (точнее NSPredicate) была повреждена: она все еще указывала на исходный адрес, но ее переменная isa была сброшенав 0!
Это меня совершенно не удивляет, почему переменная isa была сброшена в 0 ?!Есть идеи?
Спасибо!
Обновление: опубликовать код.На самом деле код взят из ABContactHelper * от erica Я немного изменил его, чтобы использовать шаблоны предикатов, чтобы сделать запрос более эффективным, поэтому я добавил эту функцию:
+ (NSPredicate*) predicateforMatchingName:(NSString*) name {
//templateForMatchingName is a static variable I declare elsewhere
//static NSPredicate * templateForMatchingName =nil;
if (templateForMatchingName == nil) {
templateForMatchingName = [NSPredicate predicateWithFormat:@"firstname contains[cd] $NAME1 OR lastname contains[cd] $NAME2 OR nickname contains[cd] $NAME3 OR middlename contains[cd] $NAME4"];
}
NSDictionary *sub = [NSDictionary dictionaryWithObjectsAndKeys:
name,@"NAME1",
name,@"NAME2",
name,@"NAME3",
name,@"NAME4",
nil];
NSPredicate *pred = [templateForMatchingName predicateWithSubstitutionVariables:sub];
return pred;
}
Я думал, что этот кодСовершенно "нормально", templateForMatchingName невозможно изменить после того, как он был создан.Но потом я обнаружил, что переменная isa была сброшена.Это не обязательно установлено в ноль.На этот раз я обнаружил, что он был сброшен на другое значение.И странная вещь в том, что он все еще указывал на исходную область.
Есть идеи?