Ряд моих пользователей начал получать сбои после того, как я переписал код Objective-C в Swift. Я не могу воспроизвести вообще, когда связан с Xcode, и я не могу понять, почему только некоторые из моих пользователей получают крах. Я получил журналы из HockeyApp, и указанная причина: Selector name found in current argument registers: registeredContacts
. Это массив, с которым я имею дело в своем коде, но ни при каких обстоятельствах я не могу заставить его сбой в отношении доступа или установки этого массива.Swift crash report function signature specialization Owned To Guaranteed
Я думаю, что это может быть мой синтаксис блока Swift и как я его вызываю из Objective-C. Моя Swift функция подписи:
func retrieveActivities(handler: (([WPActivity], Error?) -> Void)?) {
и я зову его в Objective-C с:
[[WPActivitiesManager shared] retrieveActivitiesWithHandler:nil];
Иногда я использую блок, но при запуске не нужно. Как я уже сказал, это не сбой для меня, и никаких предупреждений компилятора нет.
В верхней части моего журнала аварии:
Exception Type: SIGTRAP
Exception Codes: #0 at 0x1001c0438
Crashed Thread: 0
Application Specific Information:
Selector name found in current argument registers: registeredContacts
Thread 0 Crashed:
0 Waypoint 0x00000001001c0438 function signature specialization <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed> of Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) ->()?) ->()).(closure #2) with unmangled suffix "_merged" + 612
1 Waypoint 0x00000001001c13a4 partial apply forwarder for Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) ->()?) ->()).(closure #2) with unmangled suffix "_merged" + 64
2 Foundation 0x0000000189ca2754 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 12
3 Foundation 0x0000000189be72c8 -[NSBlockOperation main] + 92
4 Foundation 0x0000000189bd78c4 -[__NSOperationInternal _start:] + 616
5 Foundation 0x0000000189ca4b00 __NSOQSchedule_f + 224
6 libdispatch.dylib 0x00000001880691c0 _dispatch_client_callout + 12
7 libdispatch.dylib 0x000000018806dd6c _dispatch_main_queue_callback_4CF + 996
8 CoreFoundation 0x000000018918bf2c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
9 CoreFoundation 0x0000000189189b18 __CFRunLoopRun + 1656
10 CoreFoundation 0x00000001890b8048 CFRunLoopRunSpecific + 440
11 GraphicsServices 0x000000018ab3e198 GSEventRunModal + 176
12 UIKit 0x000000018f0a42fc -[UIApplication _run] + 680
13 UIKit 0x000000018f09f034 UIApplicationMain + 204
14 Waypoint 0x0000000100122888 main (main.m:14)
15 libdyld.dylib 0x000000018809c5b8 start + 0
Я подозреваю (добавлен HockeyApp я считаю) на registeredContacts
комментарий здесь не имеет значения, но это ObjC/Swift вопрос. Любые идеи оценили.
Бревно, наконец, доступен в Xcode и у меня есть эта дополнительная информация:
Это действительно связано с 'registeredContacts'. Блок обращается к этому массиву и перед вызовом блока я убеждаюсь, что массив является, по крайней мере, пустым 'NSArray', но по какой-то причине он должен был быть« nil »в очень редких случаях. Я добавил '?' В быстрый код, чтобы сделать его необязательным, и он устранил проблему в нескольких устройствах, у которых была проблема. Я должен сказать, что отчет о сбое (включая отчет от Apple) ничего полезного. – Raesu
«Я должен сказать, что отчет о сбое ничего полезного» Да, так оно и есть с проблемами управления памятью.Я написал вопрос о переполнении стека, жалующийся на это всего пару дней назад, но мне пришлось удалить его, потому что это был не вопрос, это была просто жалоба. :) Кстати, тот факт, что вы говорите о NSArray в приложении Swift, - это плохой запах, и вы должны следить за ним немедленно. NSArray - это не Swift, и вы причиняете себе боль, используя его. – matt
Ну, это потому, что я только недавно писал и переписывал части приложения в Свифте с 90% его в Obj-C. Отметил! – Raesu