ИНВАЛИДНЫЙ словарь 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 избавило меня от предупреждения.

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

  • NSCache для хранения изображений для UITableView In Swift
  • Открыть программные кнопки редактирования UITableView программно
  • удалить строку UITableView
  • Сделайте выбор UITableView перед представлением
  • Сделать прокрутку UIView с помощью UITableView, но вывести его сверху
  • Как программно добавить UIToolbar в UITableViewController?
  • Tableview не прокручивается со статическими данными
  • Как изменить цвет шрифта заголовков разделов
  • Передавать события из (UITableViewCell-> UIScrollView) на владение UITableView
  • Как установить статическую ячейку UITableView на пользовательскую высоту?
  • Динамическая высота UITableViewCell
  • Отправленные нажатия в Парсе – 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 } 
  • NSCache для хранения изображений для UITableView In Swift
  • Открыть программные кнопки редактирования UITableView программно
  • удалить строку UITableView
  • Сделайте выбор UITableView перед представлением
  • Сделать прокрутку UIView с помощью UITableView, но вывести его сверху
  • Как программно добавить UIToolbar в UITableViewController?
  • Tableview не прокручивается со статическими данными
  • Как изменить цвет шрифта заголовков разделов
  • Передавать события из (UITableViewCell-> UIScrollView) на владение UITableView
  • Как установить статическую ячейку UITableView на пользовательскую высоту?
  • Динамическая высота UITableViewCell
  • Расширение рассылки iOS: получите URL-адрес страницы при совместном использовании через контекстное меню в Safari
  • Определение того, когда UIPageViewController прокручивает последнюю страницу
  • Предупреждение при представлении UIActivityViewController
  • Сортировка массива словарей в Swift
  • Импорт CommonCrypto в Swift
  • Невозможно преобразовать значение типа «String.Type» в ожидаемый тип аргумента «String!»
  • Как я могу сосредоточить карту на местоположении пользователя в быстром?
  • Правильный способ обновления UIPageViewController после запроса API
  • Перенаправить печать в файл как перенаправление NSLog в файл
  • Работа с SKSpritenodes и текстурами
  • Цвета iOS неверны при сохранении анимированных Gif
  • 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;

  • NSCache для хранения изображений для UITableView In Swift
  • Открыть программные кнопки редактирования UITableView программно
  • удалить строку UITableView
  • Сделайте выбор UITableView перед представлением
  • Сделать прокрутку UIView с помощью UITableView, но вывести его сверху
  • Как программно добавить UIToolbar в UITableViewController?
  • Tableview не прокручивается со статическими данными
  • Как изменить цвет шрифта заголовков разделов
  • Передавать события из (UITableViewCell-> UIScrollView) на владение UITableView
  • Как установить статическую ячейку UITableView на пользовательскую высоту?
  • Динамическая высота UITableViewCell
  • Расширение рассылки iOS: получите URL-адрес страницы при совместном использовании через контекстное меню в Safari
  • Определение того, когда UIPageViewController прокручивает последнюю страницу
  • Предупреждение при представлении UIActivityViewController
  • Сортировка массива словарей в Swift
  • Импорт CommonCrypto в Swift
  • Невозможно преобразовать значение типа «String.Type» в ожидаемый тип аргумента «String!»
  • Как я могу сосредоточить карту на местоположении пользователя в быстром?
  • Правильный способ обновления UIPageViewController после запроса API
  • Перенаправить печать в файл как перенаправление NSLog в файл
  • Работа с SKSpritenodes и текстурами
  • Цвета iOS неверны при сохранении анимированных Gif
  • iOS didSelectTabBarItem, зная, какой элемент был выбран ранее
  • Сбросить разрешения для Facebook
  • закрыть приложение в iOS4
  • UITableView демпфирующая анимация и ограничения макета
  • iOS: потеря Bluetooth-соединения
  • iOS: универсальное приложение - релиз только на iPhone
  • Iphone SDK устанавливает статический IP-адрес
  • setRowAlignmentOptions CRASH, неустранимый сбой
  • iOS OpenGL ES 2.0 Billboard Object Сфера и поворот со сферой
  • NS_BLOCK_ASSERTIONS отключает вызовы NSAssert и assert ()?
  • Максимальный объем памяти ios app
  • Сбой с : индекс 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 .

  • NSCache для хранения изображений для UITableView In Swift
  • Открыть программные кнопки редактирования UITableView программно
  • удалить строку UITableView
  • Сделайте выбор UITableView перед представлением
  • Сделать прокрутку UIView с помощью UITableView, но вывести его сверху
  • Как программно добавить UIToolbar в UITableViewController?
  • Tableview не прокручивается со статическими данными
  • Как изменить цвет шрифта заголовков разделов
  • Передавать события из (UITableViewCell-> UIScrollView) на владение UITableView
  • Как установить статическую ячейку UITableView на пользовательскую высоту?
  • Динамическая высота UITableViewCell
  • Расширение рассылки iOS: получите URL-адрес страницы при совместном использовании через контекстное меню в Safari
  • Определение того, когда UIPageViewController прокручивает последнюю страницу
  • Предупреждение при представлении UIActivityViewController
  • Сортировка массива словарей в Swift
  • Импорт CommonCrypto в Swift
  • Невозможно преобразовать значение типа «String.Type» в ожидаемый тип аргумента «String!»
  • Как я могу сосредоточить карту на местоположении пользователя в быстром?
  • Правильный способ обновления UIPageViewController после запроса API
  • Перенаправить печать в файл как перенаправление NSLog в файл
  • Работа с SKSpritenodes и текстурами
  • Цвета iOS неверны при сохранении анимированных Gif
  • iOS didSelectTabBarItem, зная, какой элемент был выбран ранее
  • Сбросить разрешения для Facebook
  • закрыть приложение в iOS4
  • UITableView демпфирующая анимация и ограничения макета
  • iOS: потеря Bluetooth-соединения
  • iOS: универсальное приложение - релиз только на iPhone
  • Iphone SDK устанавливает статический IP-адрес
  • setRowAlignmentOptions CRASH, неустранимый сбой
  • iOS OpenGL ES 2.0 Billboard Object Сфера и поворот со сферой
  • NS_BLOCK_ASSERTIONS отключает вызовы NSAssert и assert ()?
  • Максимальный объем памяти ios app
  • Как решить этот «индекс 0 за пределами для пустого массива! »
  • Как легко скрыть запятую от NSString?
  • Как преобразовать NSMutableArray в NSString?
  • Запись содержимого массива в файл
  • Как получить идентификатор восстановления объектов (почему это null?)
  • Искать только в массиве, который установлен в настройках
  • Хранить NSArray в образце кода основных данных?
  • Самый быстрый способ проверить, содержит ли массив те же объекты другого массива
  • JSON Parsing в iOS 7
  • Передача массива между контроллерами представлений?
  • прокрутите массив словарей, чтобы найти значение
  • – с двойным значением производит 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; } 
  • NSCache для хранения изображений для UITableView In Swift
  • Открыть программные кнопки редактирования UITableView программно
  • удалить строку UITableView
  • Сделайте выбор UITableView перед представлением
  • Сделать прокрутку UIView с помощью UITableView, но вывести его сверху
  • Как программно добавить UIToolbar в UITableViewController?
  • Tableview не прокручивается со статическими данными
  • Как изменить цвет шрифта заголовков разделов
  • Передавать события из (UITableViewCell-> UIScrollView) на владение UITableView
  • Как установить статическую ячейку UITableView на пользовательскую высоту?
  • Динамическая высота UITableViewCell
  • Расширение рассылки iOS: получите URL-адрес страницы при совместном использовании через контекстное меню в Safari
  • Определение того, когда UIPageViewController прокручивает последнюю страницу
  • Предупреждение при представлении UIActivityViewController
  • Сортировка массива словарей в Swift
  • Импорт CommonCrypto в Swift
  • Невозможно преобразовать значение типа «String.Type» в ожидаемый тип аргумента «String!»
  • Как я могу сосредоточить карту на местоположении пользователя в быстром?
  • Правильный способ обновления UIPageViewController после запроса API
  • Перенаправить печать в файл как перенаправление NSLog в файл
  • Работа с SKSpritenodes и текстурами
  • Цвета iOS неверны при сохранении анимированных Gif
  • iOS didSelectTabBarItem, зная, какой элемент был выбран ранее
  • Сбросить разрешения для Facebook
  • закрыть приложение в iOS4
  • UITableView демпфирующая анимация и ограничения макета
  • iOS: потеря Bluetooth-соединения
  • iOS: универсальное приложение - релиз только на iPhone
  • Iphone SDK устанавливает статический IP-адрес
  • setRowAlignmentOptions CRASH, неустранимый сбой
  • iOS OpenGL ES 2.0 Billboard Object Сфера и поворот со сферой
  • NS_BLOCK_ASSERTIONS отключает вызовы NSAssert и assert ()?
  • Максимальный объем памяти ios app
  • Как решить этот «индекс 0 за пределами для пустого массива! »
  • Как легко скрыть запятую от NSString?
  • Как преобразовать NSMutableArray в NSString?
  • Запись содержимого массива в файл
  • Как получить идентификатор восстановления объектов (почему это null?)
  • Искать только в массиве, который установлен в настройках
  • Хранить NSArray в образце кода основных данных?
  • Самый быстрый способ проверить, содержит ли массив те же объекты другого массива
  • JSON Parsing в iOS 7
  • Передача массива между контроллерами представлений?
  • прокрутите массив словарей, чтобы найти значение
  • Получить аргумент блока из NSInvocation с помощью ARC
  • Ошибка EXC_BAD_ACCESS на arm64 при использовании NSInvocation
  • Есть ли способ наблюдать за каждым вызовом сообщений, вызываемым на объекте (iOS)?
  • Вызов блока iOS
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.