У меня есть приложение для iPad, которое я написал несколько лет назад, используя Greg Coombs 'IntelligentSplitViewController, который позволяет создавать макет, похожий на вращающийся UITabBarController в приложении для iPhone. Недавний выпуск прошивки 10 нарушил это таким образом, что имеет previously been described для более ранней версии в этом списке: objc_msgSend выдает сообщение об ошибке, что существует конечное число аргументов, тогда как ожидающая 0.Тип self и делегат для кастинга для исправления objc_msgОтправить неправильное количество аргументов error?
ответ на это @rintaro должно было выполнить тип cast для другого метода (typed_msgSend) для использования вместо objc_msgSend. В ответ на код другого плаката с два аргументов это: код
id (*typed_msgSend)(id, SEL) = (void *)objc_msgSend;
Грега является немного более сложным, и учитывая мою слабость в Objective-C У меня возникают трудности с делать что-то похожее на его код. (Greg, к сожалению, был болен и перестал поддерживать это.) Детали следующим образом:
- (void)willRotate:(NSNotification*)notification
{
...
if (UIInterfaceOrientationIsPortrait(toOrientation))
{
@try
{
UIPopoverController *popover = [super valueForKey:@"_hiddenPopoverController"];
objc_msgSend(theDelegate, @selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:), self, master, button, popover);
...
Таким образом, вопрос, каковы типы данных шесть аргументов? Мои попытки были:
- theDelegate - неуверены - перепробовал идентификатор 'или 'ID <UISplitViewControllerDelegate>'(из его декларации)
- @selector ... - SEL (по аналогии с ответом)
- самостоятельно - действительно не знаю - перепробовал идентификатор '
- мастер - UIViewController * (из декларации)
- кнопки - UIBarButtonItem * (от decla Рацион)
- поповера - UIPopoverController * (из декларации)
Это создает, но сбои в основном после заставки. Конечно, это может быть сбой по какой-то другой причине, но если я не уверен, что я сделал правильный выбор, я не знаю. (Как я хочу, чтобы это были Java.)
Почему вы используете 'objc_msgSend' вместо стандартного синтаксиса вызова метода? – rmaddy
@maddy - Потому что это код в классе, который я получил, который решил мою оригинальную проблему. Я этого не писал. – David
Затем замените неподходящий вызов 'objc_msgSend' обычным вызовом метода и устраните проблему. – rmaddy