2013-11-18 5 views
0

У меня есть UISwitch на мой взгляд, и все работает отлично для iOS 7 как на моем устройстве, так и на симуляторе, но когда я запускаю свое приложение в симуляторе iOS 6, я получаю странное исключение.Инициализация UISwitch вызывает непризнанное исключение выбора в iOS 6

за исключением точек останова пожаров на этой конкретной строке кода:

self.mySwitch = [[UISwitch alloc] init]; 

со следующим выходом:

-[__NSCFString count]: unrecognized selector sent to instance 

Является ли это как-то ошибка в симуляторе? Я понятия не имею, как это исправить, и на данный момент у меня нет устройства iOS 6.

Соответствующий трассировки стека в этой точке:

* thread #1: tid = 0x177e6, 0x0191be52 libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1 
frame #0: 0x0191be52 libobjc.A.dylib`objc_exception_throw 
frame #1: 0x01d144bd CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 253 
frame #2: 0x01c78bbc CoreFoundation`___forwarding___ + 588 
frame #3: 0x01c7894e CoreFoundation`_CF_forwarding_prep_0 + 14 
frame #4: 0x01c0ab10 CoreFoundation`CFArrayGetCount + 80 
frame #5: 0x0106cc04 UIKit`__36-[_UISwitchInternalView _labelImage]_block_invoke_0 + 144 
frame #6: 0x010a22fe UIKit`+[UIImage(_UIImageTintedInterfaceExtension) _cachedImageForKey:fromBlock:] + 131 
frame #7: 0x0106cb6c UIKit`-[_UISwitchInternalView _labelImage] + 187 
frame #8: 0x0106e6ed UIKit`-[_UISwitchInternalView _buildControl] + 1454 
frame #9: 0x0106b7c1 UIKit`__39-[_UISwitchInternalView initWithFrame:]_block_invoke_0 + 36 
frame #10: 0x00eb240c UIKit`+[UIView(Animation) _performWithoutAnimation:] + 82 
frame #11: 0x0106b793 UIKit`-[_UISwitchInternalView initWithFrame:] + 420 
frame #12: 0x0106f196 UIKit`-[UISwitch _commonInitNewLook] + 225 
frame #13: 0x0106f741 UIKit`-[UISwitch initWithFrame:] + 143 
frame #14: 0x0106f6ab UIKit`-[UISwitch init] + 118 

EDIT: Я использую только два звонки относительно UIAppearance и происходит сбой, даже когда я комментирую их.

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor slubDarkBlue]]; 
[[UISearchBar appearance] setImage:[UIImage imageNamed:@"searchBarIcon"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; 
+0

Вы используете ARC в своем проекте? –

+0

Да, я использую ARC. – Erik

ответ

0

Разработчик Apple на форумах разработчиков помог мне в правильном направлении. Оказывается, это проблема локализации.

я сделал:

[myUserDefaults setObject:inAppLanguage forKey:@"AppleLanguages"]; 

вместо:

[myUserDefaults setObject:@[inAppLanguage] forKey:@"AppleLanguages"]; 

где inAppLanguage является NSString как @ "де" или @ "ан". Таким образом, UISwitch столкнулся с единственной NSString вместо NSArray из NSStrings.

0

Это не имеет большого смысла, потому что авария говорит что-то о посылке сообщения «счет» в строку. Что указывает на проблему с оборванной ссылкой. Если вы уверены, что авария произошла внутри [[UISwitch alloc] init], попробуйте [[UISwitch alloc] initWithFrame:CGRectZero];

Вы используете какие-либо методы внешнего вида?

+0

Точно. Это не имеет никакого смысла, но меняется на initWithFrame: делает то же самое. – Erik

+0

Не могли бы вы опубликовать полный след следа аварии. – FelixLam

+0

Добавил его к вопросу. – Erik

-1

Похоже, вы вводите NSString, где должен быть NSArray или что-то в этом счетчике.

В любом случае это, конечно, не ошибка симулятора, поэтому не забудьте дважды проверить свой код. Это может быть в предыдущей инструкции или инициализации. Или даже, возможно, в одном из ваших xib-файлов.

Кроме того, поскольку у вас нет такого же поведения в iOS 7 и 6, вам может потребоваться проверить любое изменение API, которое вы бы пропустили.

+0

Я просто пытаюсь выделить и запустить UISwitch ... – Erik

+0

Спасибо за нижний план ... Надеюсь, вы сделаете обратное, когда поймете, что этот ответ был действительно полезен. Подумайте об этом: почему родной, только iOS6, симулятор только вызывает 'count' на строке? – aspyct

+0

Я, конечно, проголосовал бы, если бы у меня хватило репутации, чтобы проголосовать за что-то в первую очередь. Тем не менее, исключение где-то брошено внутри метода init, даже если я создаю совершенно другой UISwitch в моем ViewController. Я не вижу, как могут быть какие-либо изменения API или как я ввожу что-нибудь в этот момент. – Erik

Смежные вопросы