падение при прикосновении к строке состояния - PullRequest
1 голос
/ 06 сентября 2011

Мое приложение на основе навигации. UIBarButtonItem на нем.

refreshstopButton = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self 
action:@selector(refreshTapped)]; 

Я обнаружил, что когда я нажимаю на строку состояния, запускается «refreshTapped» (не вызванный моим большим пальцем, также воспроизводимый с помощью симулятора и щелчка мыши). Stacktrace показывает, что это исходит от

-[UIApplication sendAction:to:from:forEvent:];

Я не понимаю, почему. Иногда мое приложение вылетает с очень похожим стеком, например Сбой на iPhone?

Примечание: Я также попробовал пример UICatalog, я увидел то же самое: нажатие на строку состояния запускает действие «Назад» UIBarButtonItem (с помощью симулятора).

Поработав некоторое время с симулятором, я понял, что чувствительная область намного больше границы кнопки. Я думаю, может быть, именно так работает Cocoa Touch.

Однако проблема сбоя остается нерешенной. Согласно трассировке стека, похоже, что это вызвано касанием строки состояния.

Вот журнал аварий:

0   libobjc.A.dylib                 0x32da1cb2 objc_msgSend + 42
1   UIKit                           0x324c3a30 -[UIControl(Deprecated) sendAction:toTarget:forEvent:] + 28
2   UIKit                           0x324c3990 -[UIControl(Internal) _sendActionsForEventMask:withEvent:] + 352
3   UIKit                           0x32563764 -[UIControl mouseUp:] + 376
4   UIKit                           0x3254d314 -[UIView(Internal) _mouseUp:] + 32
5   UIKit                           0x3254a480 -[UIWindow _handleMouseUp:] + 108
6   UIKit                           0x3254a8da -[UIWindow _statusBarMouseUp:] + 122
7   UIKit                           0x32680980 -[UIStatusBar touchesEnded:withEvent:] + 320
8   CoreFoundation                  0x328d056a -[NSObject(NSObject) performSelector:withObject:withObject:] + 18
9   UIKit                           0x32406094 forwardMethod2 + 60
10  UIKit                           0x324a04ca -[UIResponder touchesEnded:withEvent:] + 2
11  UIKit                           0x32404bee -[UIWindow _sendTouchesForEvent:] + 362
12  UIKit                           0x32404568 -[UIWindow sendEvent:] + 256
13  UIKit                           0x323ed30c -[UIApplication sendEvent:] + 292
14  UIKit                           0x323ecc4c _UIApplicationHandleEvent + 5084

Я также пытался следовать http://cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html, чтобы зафиксировать событие в строке состояния. Но, как отметили некоторые другие, он больше не работает в iOS 4.x

1 Ответ

0 голосов
/ 06 сентября 2011

Проверьте и замените эту строку, чтобы избежать проблемы сбоя.

@selector(refreshTapped:) вместо @selector(refreshTapped)

(обратите внимание на дополнительные : в первом варианте)

...