ИНВАЛИДНЫЙ словарь 0). Почему я получаю эту ошибку?

Я получаю это сообщение только в первый раз, когда я касаюсь верхней строки поиска таблицы.

INVALID dictionary 0 ) INVALID dictionary 0 ) 

Все по-прежнему работают после предупреждения, но я предпочитаю этого не видеть. Кто-то знает, почему я получаю это сообщение?

Спасибо за прочтение.

3 Solutions collect form web for “ИНВАЛИДНЫЙ словарь 0). Почему я получаю эту ошибку?”

Кажется, это не ошибка iOS 4.2. Что-то другое. Иногда я получаю эту проблему с 4.2. Я не уверен, но я заметил, что эта ошибка иногда возникает, когда я не использую локализацию en_US, например, испанский.

Теперь, с iOS 4.2. Я больше не получаю эту проблему. Я думаю, что это была ошибка 4.0. версия.

Я получил эту проблему под управлением iOS 4.3.6 -[UIResponder becomeFirstResponder] , в результате чего появился следующий результат:

  INVALID dictionary 0 ) WARNING: Input manager failed to load static dictionary for: nl_NL INVALID dictionary 0 ) 

WARNING напомнило мне, что ранее я использовал голландскую клавиатуру для тестирования. Удаление этой клавиатуры с помощью настроек iOS избавило меня от предупреждения.

Это явно недействительное решение, если ваше приложение поддерживает несколько языков, но для моих целей это было приемлемо. Надежда помогает кому-то.

  • UISearchController Отображение UITableView при повороте
  • Как показать «Нет результатов» в UITableView, если результат поиска не возвращен?
  • iOS Swift, обновить пользовательскую метку ячейки UITableView вне табличного представления CellForRow с использованием тега
  • Ошибка в didselect tableview на SWRevealViewController
  • Установите высоту UIImageView, пропорциональную ширине, в UITableViewCell
  • UILocalizedIndexedCollation и неанглийские индексы
  • Проведите по экрану, чтобы удалить UITableView
  • Как динамически изменять размер статического UITableViewCell?
  • Обнаружен случай, когда ограничения двусмысленно указывают на высоту нуля
  • Раздел заголовка пользовательской таблицы
  • как обновлять данные в виде таблицы (Swift)
  • Отправленные нажатия в Парсе – 0

    Поэтому есть много вопросов и ответов, но никто из них не работает для меня. Когда я перехожу на панель анализа синтаксиса, у меня есть 2 устройства в каждом, но когда я посылаю push, он говорит, что нажатие посылает 0. Они оба устройства iOS, и я использую push-портал с сертификатом разработки.p12.

    Что мне не хватает?

    введите описание изображения здесь

    введите описание изображения здесь

    введите описание изображения здесь

    введите описание изображения здесь

    введите описание изображения здесь

    One Solution collect form web for “Отправленные нажатия в Парсе – 0”

    Если вы не получили уведомление на своем устройстве, возможно, вы забыли вызвать метод initializeNotificationServices в didFinishLaunchingWithOptions

     func initializeNotificationServices() -> Void { let settings = UIUserNotificationSettings(forTypes: [ .Sound, .Alert, .Badge], categories: nil) UIApplication.sharedApplication().registerUserNotificationSettings(settings) print("initialize") // This is an asynchronous method to retrieve a Device Token // Callbacks are in AppDelegate.swift // Success = didRegisterForRemoteNotificationsWithDeviceToken // Fail = didFailToRegisterForRemoteNotificationsWithError UIApplication.sharedApplication().registerForRemoteNotifications() } func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let installation = PFInstallation.currentInstallation() installation.setDeviceTokenFromData(deviceToken) installation.saveInBackground() print("didRegisterForRemoteNotificationsWithDeviceToken") } func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { if error.code == 3010 { print("Push notifications are not supported in the iOS Simulator.") } else { print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error) } } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { PFPush.handlePush(userInfo) print("didReceiveRemoteNotification") if application.applicationState == UIApplicationState.Inactive { PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo) } } 

    И метод:

     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. Parse.setApplicationId("MyID", clientKey: "MyKey") if application.applicationState != UIApplicationState.Background { // Track an app open here if we launch with a push, unless // "content_available" was used to trigger a background push (introduced in iOS 7). // In that case, we skip tracking here to avoid double counting the app-open. let preBackgroundPush = !application.respondsToSelector("backgroundRefreshStatus") let oldPushHandlerOnly = !self.respondsToSelector("application:didReceiveRemoteNotification:fetchCompletionHandler:") var pushPayload = false if let options = launchOptions { pushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil } if (preBackgroundPush || oldPushHandlerOnly || pushPayload) { PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions) } } if application.respondsToSelector("registerUserNotificationSettings:") { let userNotificationTypes = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] let settings = UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound], categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications() print("register") } else { let types = [UIRemoteNotificationType.Badge, UIRemoteNotificationType.Alert, UIRemoteNotificationType.Sound] application.registerForRemoteNotificationTypes([UIRemoteNotificationType.Badge, UIRemoteNotificationType.Alert, UIRemoteNotificationType.Sound]) } initializeNotificationServices() return true } 
  • UISearchController Отображение UITableView при повороте
  • Как показать «Нет результатов» в UITableView, если результат поиска не возвращен?
  • iOS Swift, обновить пользовательскую метку ячейки UITableView вне табличного представления CellForRow с использованием тега
  • Ошибка в didselect tableview на SWRevealViewController
  • Установите высоту UIImageView, пропорциональную ширине, в UITableViewCell
  • UILocalizedIndexedCollation и неанглийские индексы
  • Проведите по экрану, чтобы удалить UITableView
  • Как динамически изменять размер статического UITableViewCell?
  • Обнаружен случай, когда ограничения двусмысленно указывают на высоту нуля
  • Раздел заголовка пользовательской таблицы
  • как обновлять данные в виде таблицы (Swift)
  • Как сохранить определенный массив форматов в Core Data?
  • WKInterfaceMap не загружает карту
  • Segue Out of Navigation Controller
  • Как отображать значения OptionSet в удобочитаемой форме?
  • POST с быстрым и API
  • Подготовить forSegue и PerformSegueWithIdentifier отправитель
  • Применить NSPredicate на
  • Swift - динамический размер UITableViewCell, основанный на соотношении сторон изображения
  • Nil-coalescing для предоставления значений по умолчанию в Swift 1.2
  • Как повернуть UIAlertController в Swift
  • Установка шрифта для держателя места UITextfield в быстром
  • 0 Не работает в вводе типа валюты

    Я беру данные в виде валюты, например, 54 получает значение 0,54, но когда я пытаюсь ввести 100, я получаю только 0,1. Код не работает на 0 . Вы не можете ввести значение как 100.00 . Код, который я использую,

      (BOOL)textField:(UITextField *)transactionAmount shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *substring = transactionAmount.text; substring = [substring stringByAppendingString:string]; NSLog(@"Text : %@",substring); NSString *cleanCentString = [[transactionAmount.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Parse final integer value NSInteger centAmount = cleanCentString.integerValue; // Check the user input if (string.length > 0) { // Digit added centAmount = centAmount * 10 + string.integerValue; } else { // Digit deleted centAmount = centAmount / 10; } // Update call amount value NSNumber *amount = [[NSNumber alloc] initWithFloat:(float)centAmount / 100.0f]; // Write amount with currency symbols to the textfield NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init]; // [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [_currencyFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; [_currencyFormatter setCurrencyCode:@"USD"]; [_currencyFormatter setNegativeFormat:@"-¤#,##0.00"]; self.transactionAmount.text = [_currencyFormatter stringFromNumber:amount]; // [self SetMainMessage:customTipsValue.text]; return NO; } 

    2 Solutions collect form web for “0 Не работает в вводе типа валюты”

    Большая часть вашей первоначальной «струйной очистки» неверна, а ваш формат форматирования неверен. Это должно быть примерно так:

     - (BOOL)textField:(UITextField *)transactionAmount shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *substring = transactionAmount.text; substring = [substring stringByReplacingCharactersInRange:range withString:string]; NSLog(@"New Text : %@",substring); NSString *cleanCentString = [[substring componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Parse final integer value NSInteger centAmount = cleanCentString.integerValue; // Update call amount value NSNumber *amount = [[NSNumber alloc] initWithFloat:centAmount / 100.0f]; // NOTE: make this an instance variable and set it up just once // Write amount with currency symbols to the textfield NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init]; [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [_currencyFormatter setCurrencyCode:@"USD"]; [_currencyFormatter setNegativeFormat:@"-¤#,##0.00"]; self.transactionAmount.text = [_currencyFormatter stringFromNumber:amount]; return NO; } 

    Если по какой-то причине вы хотите использовать формат «Десятичный» вместо формата «Валюта», убедитесь, что минимальные и максимальные цифры (десятичные разряды) установлены на 2.

    Вы действительно хотите жестко установить USD? Как насчет людей, использующих приложение в других странах?

    Ваша первоначальная чистка строк не помогла пользователю правильно вырезать, скопировать или вставить. Он также использовал неправильный текст для создания cleanCentString .

    Я понял, что

    Если введенное значение равно 0, вы хотите 0.

    Если введенное значение находится между 1 и 99, вы хотите от 0,01 до 0,99.

    Если введенное значение равно 1 или более, вы хотите 1.00, как мудрый.

    Почему бы вам не поступить так, как float requiredCurrency=inputCurrency/100.0f;

  • UISearchController Отображение UITableView при повороте
  • Как показать «Нет результатов» в UITableView, если результат поиска не возвращен?
  • iOS Swift, обновить пользовательскую метку ячейки UITableView вне табличного представления CellForRow с использованием тега
  • Ошибка в didselect tableview на SWRevealViewController
  • Установите высоту UIImageView, пропорциональную ширине, в UITableViewCell
  • UILocalizedIndexedCollation и неанглийские индексы
  • Проведите по экрану, чтобы удалить UITableView
  • Как динамически изменять размер статического UITableViewCell?
  • Обнаружен случай, когда ограничения двусмысленно указывают на высоту нуля
  • Раздел заголовка пользовательской таблицы
  • как обновлять данные в виде таблицы (Swift)
  • Как сохранить определенный массив форматов в Core Data?
  • WKInterfaceMap не загружает карту
  • Segue Out of Navigation Controller
  • Как отображать значения OptionSet в удобочитаемой форме?
  • POST с быстрым и API
  • Подготовить forSegue и PerformSegueWithIdentifier отправитель
  • Применить NSPredicate на
  • Swift - динамический размер UITableViewCell, основанный на соотношении сторон изображения
  • Nil-coalescing для предоставления значений по умолчанию в Swift 1.2
  • Как повернуть UIAlertController в Swift
  • Установка шрифта для держателя места UITextfield в быстром
  • RestKit: изменить базовый URL-адрес RKObjectManager
  • iPhone GPS - Не получать достоверные обновления местоположения
  • Автоматическая компоновка с навигационной панелью и контроллером просмотра (iOS 7)
  • Как измерить истинную производительность FPS OpenGL ES?
  • Как кэшировать с использованием NSURLSession и NSURLCache. Не работает
  • Веб-сайт повторно перезагружается, а затем падает на iPhone 4: iOS 8.0.2 и iOS 8.1.2
  • Добавление контактного изображения в адресную книгу iPhone
  • RestKit обратные отношения «один ко многим» (без CoreData)
  • Как заставить представление сделать себя?
  • Проблемы создания как iOS4.3, так и iOS5.0
  • Использование AFJSONRequestOperation
  • Сбой с : индекс 0 за пределами для ошибки пустого массива

    Я получаю отчеты о сбоях через пользователей моего приложения iOS, но сбой я не могу воспроизвести сам, и я не могу отследить ошибку до строки в моем собственном коде (кроме того, что она возникает из строки 14 в main.m, но это приложение приложений по умолчанию для приложений iOS. Ниже отчета о сбоях, который я получил.

    Поймите, что в какой-то момент объект находится в индексе 0, извлекается из пустого массива. Но поскольку это, похоже, не указывает на мой собственный код, может ли это быть ошибкой в ​​iOS? (Это происходит на разных платформах и с разными версиями iOS).

    Я надеюсь, что у кого-то есть представление о том, что происходит, или может указать мне в правильном направлении. Благодарю.

    ОТЧЕТ О СБОЕ:

    Incident Identifier: [TODO] CrashReporter Key: [TODO] Process: Mary Black [797] Path: /var/mobile/Applications/28A68F8B-294E-4B86-9E75-ED5484E5EF4D/Mary Black.app/Mary Black Identifier: net.broset.Mary-Black Version: 225 Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2011-10-14 03:47:32 +0000 OS Version: iPhone OS 5.0 (9A334) Report Version: 104 Exception Type: SIGTRAP Exception Codes: #0 at 0x35b07848 Crashed Thread: 0 Application Specific Information: *** Terminating app due to uncaught exception \\\'NSRangeException\\\', reason: \\\'*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array\\\' Thread 0 Crashed: 0 libsystem_kernel.dylib 0x00010848 __kill + 8 1 CoreFoundation 0x000b9987 __handleUncaughtException + 75 2 libobjc.A.dylib 0x000092d1 _objc_terminate + 129 3 libc++abi.dylib 0x000043c5 _ZL19safe_handler_callerPFvvE + 77 4 libc++abi.dylib 0x00004451 operator delete(void*) + 1 5 libc++abi.dylib 0x00005825 __cxa_current_exception_type + 1 6 libobjc.A.dylib 0x00009235 objc_exception_rethrow + 13 7 CoreFoundation 0x0000f545 CFRunLoopRunSpecific + 405 8 CoreFoundation 0x0000f3a5 CFRunLoopRunInMode + 105 9 GraphicsServices 0x00003fed GSEventRunModal + 157 10 UIKit 0x00031743 UIApplicationMain + 1091 11 Mary Black 0x00002fa7 main (main.m:14) 

    4 Solutions collect form web for “Сбой с : индекс 0 за пределами для ошибки пустого массива”

    Одним из способов отладки этой проблемы является добавление Symbolic Breakpoint в objectAtIndex: это может привести к множеству обращений к объектуAtIndex: до того, как отладчик попадет на тот, который вам нужен, но он обязательно найдет его.

    Шаги в Xcode 4:

    • Просмотр> Навигаторы> Навигатор точек останова
    • нажмите «+» и выберите «Добавить символическую точку останова» во всплывающем окне
    • введите «objectAtIndex:» в текстовом поле «Символ» и нажмите «Готово».

    во время выполнения, если вы не можете определить, какой объектAtIndex: вы нажимаете, переместите ползунок в нижней части отладочного навигатора полностью вправо.

    Это остановит отладчик на линии нарушения:

    Xcode / Edit Scheme / Diagnostics / Log Exceptions.

    Эта ошибка означает, что вы пытаетесь получить объект из NSArray из позиции, где объект не найден. Другими словами: если индекс равен 0, ваш массив пуст.
    И, скорее всего, это ваш код, поскольку main () вызывает ваш код.

    Вы должны искать свой проект для всех применений objectAtIndex: и objectAtIndex: каждого из них в качестве виновника. Убедитесь, что вы никогда не вызываете его на пустой массив.

    Еще один совет: если вы знаете, что хотите получить только последний объект в массиве или знаете, что массив будет содержать только один объект, вы можете использовать lastObject вместо objectAtIndex: – он безопаснее, потому что он не будет генерировать исключение , хотя вам все равно нужно проверить nil .

  • UISearchController Отображение UITableView при повороте
  • Как показать «Нет результатов» в UITableView, если результат поиска не возвращен?
  • iOS Swift, обновить пользовательскую метку ячейки UITableView вне табличного представления CellForRow с использованием тега
  • Ошибка в didselect tableview на SWRevealViewController
  • Установите высоту UIImageView, пропорциональную ширине, в UITableViewCell
  • UILocalizedIndexedCollation и неанглийские индексы
  • Проведите по экрану, чтобы удалить UITableView
  • Как динамически изменять размер статического UITableViewCell?
  • Обнаружен случай, когда ограничения двусмысленно указывают на высоту нуля
  • Раздел заголовка пользовательской таблицы
  • как обновлять данные в виде таблицы (Swift)
  • Как сохранить определенный массив форматов в Core Data?
  • WKInterfaceMap не загружает карту
  • Segue Out of Navigation Controller
  • Как отображать значения OptionSet в удобочитаемой форме?
  • POST с быстрым и API
  • Подготовить forSegue и PerformSegueWithIdentifier отправитель
  • Применить NSPredicate на
  • Swift - динамический размер UITableViewCell, основанный на соотношении сторон изображения
  • Nil-coalescing для предоставления значений по умолчанию в Swift 1.2
  • Как повернуть UIAlertController в Swift
  • Установка шрифта для держателя места UITextfield в быстром
  • RestKit: изменить базовый URL-адрес RKObjectManager
  • iPhone GPS - Не получать достоверные обновления местоположения
  • Автоматическая компоновка с навигационной панелью и контроллером просмотра (iOS 7)
  • Как измерить истинную производительность FPS OpenGL ES?
  • Как кэшировать с использованием NSURLSession и NSURLCache. Не работает
  • Веб-сайт повторно перезагружается, а затем падает на iPhone 4: iOS 8.0.2 и iOS 8.1.2
  • Добавление контактного изображения в адресную книгу iPhone
  • RestKit обратные отношения «один ко многим» (без CoreData)
  • Как заставить представление сделать себя?
  • Проблемы создания как iOS4.3, так и iOS5.0
  • Использование AFJSONRequestOperation
  • Гопарльпар Филиппольль Нуль Нуль Нульльльль Филипль Нульльльль Филипль Нульльльль Нуль Нульльтро Нуль Нульль Нульбальз Филип Нуль Нульльльльльльльльльльльльльльльльльльльльльльльльль делитольфальдепаркальгильгельгельге
  • Как добавить объект в первый индекс NSArray
  • addObjectsFromArray: не копирование в глобальный NSMutableArray
  • Сортировка NSArray по дате и времени
  • Украсить NSLog NSArray и NSDictionary
  • Возникла авария символа EXC_CORPSE_NOTIFY, как ее отслеживать?
  • Определите следующую UILocalNotification, которая будет срабатывать
  • Почему я не могу сравнить количество нового массива?
  • Разность NSArray между firstObject и objectAtIndex: 0
  • Найти indexOfObject из NSArray
  • NSPredicate на вложенном массиве с NSDictionary как объект
  • – с двойным значением производит 0 неожиданно

    Я пытаюсь вызвать метод, который возвращает double используя NSInvocation . Но я обнаружил, что он не работает в 64-битных приложениях iOS. Он работает на OS X, в симуляторе – и 32-битном, и 64-битном – iPad 2, и iPad Air с 32-битной сборкой. Эта проблема связана только с 64-разрядной версией устройства iPad Air.

    Это код для демонстрации проблемы:

     NSMethodSignature *signature = [NSString instanceMethodSignatureForSelector:@selector(doubleValue)]; for (int i = 0; i < 10; i++) { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; NSString *str = [NSString stringWithFormat:@"%d", i]; [invocation setTarget:str]; [invocation setSelector:@selector(doubleValue)]; [invocation invoke]; union { double d; uint64_t u; } d; [invocation getReturnValue:&d.d]; NSLog(@"%lf, %llx", dd, du); } 

    ожидаемый результат

     2013-11-09 22:34:18.645 test[49075:907] 0.000000, 0 2013-11-09 22:34:18.647 test[49075:907] 1.000000, 3ff0000000000000 2013-11-09 22:34:18.648 test[49075:907] 2.000000, 4000000000000000 2013-11-09 22:34:18.649 test[49075:907] 3.000000, 4008000000000000 2013-11-09 22:34:18.650 test[49075:907] 4.000000, 4010000000000000 2013-11-09 22:34:18.651 test[49075:907] 5.000000, 4014000000000000 2013-11-09 22:34:18.652 test[49075:907] 6.000000, 4018000000000000 2013-11-09 22:34:18.653 test[49075:907] 7.000000, 401c000000000000 2013-11-09 22:34:18.654 test[49075:907] 8.000000, 4020000000000000 2013-11-09 22:34:18.654 test[49075:907] 9.000000, 4022000000000000 

    Выход для 64-битной сборки на iPad Air

     2013-11-09 22:33:55.846 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.847 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.848 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.848 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.849 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.849 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.850 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.850 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.851 test[998:60b] 0.000000, 18710a969 2013-11-09 22:33:55.851 test[998:60b] 0.000000, 18710a969 

    Это также происходит для значения float .

     2013-11-09 23:51:10.021 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.023 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.024 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.024 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.025 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.026 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.026 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.027 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.027 test[1074:60b] -0.000000, 80000000 2013-11-09 23:51:10.028 test[1074:60b] -0.000000, 80000000 

    3 Solutions collect form web for “– с двойным значением производит 0 неожиданно”

    Согласовано с @David H, что NSInvocation в этом случае нарушена, или, возможно, метод NSString doubleValue . Однако я смог заставить его работать.

    Мне кажется, что NSInvocation нарушается из-за проблемы / несоответствия вызывающего соглашения. Как правило, параметры и возвращаемые значения для целей-c-методов передаются в регистры. ( objc_msgSend знает, как выполнить этот тип вызова.) Но если параметр или возвращаемое значение является структурой или типом, который не помещается в регистр, они передаются в стек. ( objc_msgSend_stret выполняет этот тип вызова.) NSInvocation обычно использует подпись метода, чтобы иметь возможность решить, нужно ли ему вызывать objc_msgSend или objc_msgSendStret . Я предполагаю, что теперь он также должен знать, на какой платформе он работает, и вот где ошибка.

    Я немного поиграл с вашим кодом, и кажется, что на arm64 двойное возвращаемое значение передается как структура, но NSInvocation рассматривает его как переданный в регистр. Я понятия не имею, какая из сторон правильная. (Я знаю, что достаточно только в этой области, чтобы быть опасным. Мои пальцы пересекаются с кем-то с более низкоуровневыми отбивными, чем я, и читаю это, и дает лучшее объяснение!)

    Тем не менее, мне кажется, что есть значительные изменения в том, как параметры и результаты передаются в руке (32 бит) против arm64. См. Разделы « Возврат результата» как в стандартном стандарте вызова ARM, так и в командах ARM64 и ARM. Стандартный вызов (не 64 бит).

    Я смог заставить NSInvocation обрабатывать вызов, возвращая структуру, содержащую double, и это заставило ее работать должным образом. Для этого я подделал сигнатуру метода поддельной подписи метода, возвращающего структуру. Я поместил это в категорию NSString но он мог жить где угодно.

    Не зная, что конкретно нарушено, или что произойдет, когда оно будет исправлено, я вряд ли отправил бы код с этим «исправлением». Я найду другое решение.

     typedef struct { double d; } doubleStruct; @interface NSString (TS) - (doubleStruct) ts_doubleStructValue; @end @implementation NSString (TS) - (doubleStruct) ts_doubleStructValue { doubleStruct ds; return ds; } @end - (void) test { NSMethodSignature *signature = [NSString instanceMethodSignatureForSelector: @selector( ts_doubleStructValue )]; for (int i = 0; i < 10; i++) { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; NSString *str = [NSString stringWithFormat:@"%d", i]; [invocation setTarget:str]; [invocation setSelector:@selector(doubleValue)]; [invocation invoke]; double d; [invocation getReturnValue: &d]; NSLog(@"%lf", d); } } 

    У вас нет надежды заставить это работать в настоящее время. Я пробовал много вариантов вашего кода и тестировал на iPhone 5S и последний симулятор в режиме 32 и 64 бит, но это должно быть ошибкой с arm64, поскольку 64-битный симулятор работает просто отлично.

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

    Кроме того, я попытался использовать цель NSNumber, созданную с использованием интегрального метода и метода float: метод float фактически приводит к сбою! Я пробовал другие параметры, такие как сохранение строки и установка настройки сохранения вызова, без изменений.

    Я ввел ошибку об этом: 15441447: NSInvocation fails only on arm64 devices – любой, кого это беспокоит, может обмануть его. Я также загрузил демонстрационный проект.

    Код, который я загрузил:

     - (void)test { NSMethodSignature *signature = [NSString instanceMethodSignatureForSelector:@selector(floatValue)]; for (int i = 0; i < 10; i++) { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; #if 0 NSString *str = [NSString stringWithFormat:@"%d", i]; [invocation setTarget:str]; // fails on iPhone 5s #else //[invocation setTarget:[NSNumber numberWithFloat:(float)i]]; // crashes in 'invoke' on iPhone 5s, works fine in simulator [invocation setTarget:[NSNumber numberWithInteger:i]]; // fails on iphone 5S #endif [invocation setSelector:@selector(floatValue)]; [invocation invoke]; float f; [invocation getReturnValue:&f]; NSLog(@"%f", f); } } 

    Исправлено на основе ответа @TomSwift.

      - (void)testInvocation { NSInvocation *invocation = [[self class] invocationWithObject:self selector:@selector(getAFloat)]; [invocation setTarget:self]; [invocation invoke]; double d; [invocation getReturnValue: &d]; NSLog(@"d == %f", d); return YES; } + (NSInvocation *)invocationWithObject:(id)object selector:(SEL)selector { NSMethodSignature *sig = [object methodSignatureForSelector:selector]; if (!sig) { return nil; } #ifdef __LP64__ BOOL isReturnDouble = (strcmp([sig methodReturnType], "d") == 0); BOOL isReturnFloat = (strcmp([sig methodReturnType], "f") == 0); if (isReturnDouble || isReturnFloat) { typedef struct {double d;} doubleStruct; typedef struct {float f;} floatStruct; NSMutableString *types = [NSMutableString stringWithFormat:@"%s@:", isReturnDouble ? @encode(doubleStruct) : @encode(floatStruct)]; for (int i = 2; i < sig.numberOfArguments; i++) { const char *argType = [sig getArgumentTypeAtIndex:i]; [types appendFormat:@"%s", argType]; } sig = [NSMethodSignature signatureWithObjCTypes:[types UTF8String]]; } #endif NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig]; [inv setSelector:selector]; return inv; } 
  • UISearchController Отображение UITableView при повороте
  • Как показать «Нет результатов» в UITableView, если результат поиска не возвращен?
  • iOS Swift, обновить пользовательскую метку ячейки UITableView вне табличного представления CellForRow с использованием тега
  • Ошибка в didselect tableview на SWRevealViewController
  • Установите высоту UIImageView, пропорциональную ширине, в UITableViewCell
  • UILocalizedIndexedCollation и неанглийские индексы
  • Проведите по экрану, чтобы удалить UITableView
  • Как динамически изменять размер статического UITableViewCell?
  • Обнаружен случай, когда ограничения двусмысленно указывают на высоту нуля
  • Раздел заголовка пользовательской таблицы
  • как обновлять данные в виде таблицы (Swift)
  • Как сохранить определенный массив форматов в Core Data?
  • WKInterfaceMap не загружает карту
  • Segue Out of Navigation Controller
  • Как отображать значения OptionSet в удобочитаемой форме?
  • POST с быстрым и API
  • Подготовить forSegue и PerformSegueWithIdentifier отправитель
  • Применить NSPredicate на
  • Swift - динамический размер UITableViewCell, основанный на соотношении сторон изображения
  • Nil-coalescing для предоставления значений по умолчанию в Swift 1.2
  • Как повернуть UIAlertController в Swift
  • Установка шрифта для держателя места UITextfield в быстром
  • RestKit: изменить базовый URL-адрес RKObjectManager
  • iPhone GPS - Не получать достоверные обновления местоположения
  • Автоматическая компоновка с навигационной панелью и контроллером просмотра (iOS 7)
  • Как измерить истинную производительность FPS OpenGL ES?
  • Как кэшировать с использованием NSURLSession и NSURLCache. Не работает
  • Веб-сайт повторно перезагружается, а затем падает на iPhone 4: iOS 8.0.2 и iOS 8.1.2
  • Добавление контактного изображения в адресную книгу iPhone
  • RestKit обратные отношения «один ко многим» (без CoreData)
  • Как заставить представление сделать себя?
  • Проблемы создания как iOS4.3, так и iOS5.0
  • Использование AFJSONRequestOperation
  • Гопарльпар Филиппольль Нуль Нуль Нульльльль Филипль Нульльльль Филипль Нульльльль Нуль Нульльтро Нуль Нульль Нульбальз Филип Нуль Нульльльльльльльльльльльльльльльльльльльльльльльльль делитольфальдепаркальгильгельгельге
  • Как добавить объект в первый индекс NSArray
  • addObjectsFromArray: не копирование в глобальный NSMutableArray
  • Сортировка NSArray по дате и времени
  • Украсить NSLog NSArray и NSDictionary
  • Возникла авария символа EXC_CORPSE_NOTIFY, как ее отслеживать?
  • Определите следующую UILocalNotification, которая будет срабатывать
  • Почему я не могу сравнить количество нового массива?
  • Разность NSArray между firstObject и objectAtIndex: 0
  • Найти indexOfObject из NSArray
  • NSPredicate на вложенном массиве с NSDictionary как объект
  • Проблемы NSInvocation и памяти
  • NSInvocationOperation обратный вызов слишком рано
  • Есть ли альтернатива для NSInvocation в Swift?
  • Определение класса Objective-C без базового класса - предупреждение компилятора
  • Interesting Posts

    UILabel не автошина

    Xcode 9, выбранный тип фрагмента кода удаляется при нажатии клавиши ввода

    Странный сбой при использовании нового эффекта PageCurl при чтении PDF с помощью MonoTouch и iOS 5.0

    Сопоставление бизнес-объектов с основными данными в iOS

    Простая таблица с несколькими колонками с использованием Xamarin

    Минимальная системная версия Swift 2.0 (цель развертывания)

    Просмотр или извлечение файла Core Data .sqlite с устройства

    Xcode заблокирован при «Присоединении к (имя приложения)» при запуске приложения в симуляторе

    doubleValue не преобразует объект в двойное значение правильно во все времена

    iOS – выполняется ли приложение: didFinishLaunchingWithOptions в основном потоке?

    Всегда получать уникальный идентификатор устройства в iOS 7

    Является ли prepareForSegue правильным способом передачи значения между контроллерами представления

    NavigationBar и StatusBar объединяются после отклонения модального

    Установить количество одновременных загрузок с помощью NSURLSessionDownloadTask

    Секундомер – NSTimer или NSDate

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.