это беспокоило меня все утро, я искал весь этот веб-сайт и не могу найти никаких упоминаний об этой проблеме.
В моем проекте у меня есть 2 объекта с циклическими зависимостями, настроенными точно так же;
Класс A.h
@class ClassB;
@interface ClassA : NSObject {
ClassB *foo;
}
@end
Класс A.m
#import "ClassB.h"
@implementation ClassA
// Whatever goes here
@end
КлассB.h
@class ClassA;
@interface ClassB : NSObject {
ClassA *foo;
}
@end
КлассB.m
#import "ClassA.h"
@implementation ClassB
// Whatever goes here
@end
(КРЕДИТ - Разрешает ли Objective-C циклические зависимости?)
Я использовал эту технику в нескольких проектах, и до сих пор она работала совершенно нормально, каждый из объектов мог прекрасно обращаться к свойствам друг друга.
Пару дней назад я добавил несколько методов в ClassA и попытался вызвать их из ClassB, опять же, это сработало отлично ..... поэтому я подумал, что проблема в том, что я тестировал iPhone с различными версиями ОС, но все они были iPhone5S и выше. Сегодня я запустил проект на симуляторе iPad2, и он падает при запуске НЕКОТОРЫХ методов, то же самое происходит с симуляторами iPhone4S и iPhone5.
Например, методы, которые у меня есть в ClassA, это просто простые сеттеры;
-(void)setHomeButtonPageContents:(NSString*)contents Index:(int)index
{
homeButtonPageContents[index]=contents;
}
Все они являются вариациями вышеперечисленного: некоторые настраивают цвета, некоторые настраивают шрифты, но на старых устройствах (iPad2, iPhone4S и iPhone5) некоторые работают, а некоторые нет.
Любые идеи?!?!
NSString *homeButtonPageContents[9]
? Это очень необычный шаблон в Objective-C, и я, честно говоря, не уверен, что он действительно правильно поддерживается, особенно с ARC. Он также не обеспечивает никакой проверки диапазона (и вы тоже не проверяете его сами). ИспользуйтеNSMutableArray
. И проверьте значение вашего индекса, фактическая ошибка может быть где-то еще... - person jcaron   schedule 02.12.2015