Мое приложение для 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 была сброшена. Он не обязательно равен нулю. На этот раз я обнаружил, что он был сброшен на другое значение. И странно то, что он по-прежнему указывал на исходную область.
Любая идея?