Сегодня Extension имеет название, но без тела iOS 8

Я тестирую новый TodayExtensions в iOS 8, и я выполнил шаги для создания Today Extension, как описано в видео WWDC. Создание расширений для iOS и OS X, часть 1. Я добавил цветной UIView в ViewController в предоставленном раскадровке. Я получаю заголовок в моем центре уведомлений "Сегодня", но у меня нет тела с моим цветным видом. Это выглядит так (я сделал два):

enter image description here

Кто-нибудь еще это понимает? Я установил точки останова во всех моих методах ViewControllers и ничего не вызвал. Я изменил свой Info.plist, чтобы просто перейти непосредственно к моему классу VC, а не к раскадровке, и ничего не получаю. Я могу изменить заголовок сегодняшнего расширения в info.plist.

Ответы

Ответ 1

Во-первых, чтобы проверить, что что-то происходит, добавьте awakeFromNib в свой контроллер представления и установите предпочтительный размер содержимого (весь код в Obj C):

- (void)awakeFromNib {
    [super awakeFromNib];
    [self setPreferredContentSize:CGSizeMake(self.view.bounds.size.width, 50)];
}

Как сказал вышеперечисленный микспер, закомментируйте метод init по умолчанию и создайте пустой initWithCoder: чтобы обойти некоторую ошибку в бета-версии 2:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // init
    }
    return self;
}

//- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
//    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
//    if (self) {
//        // Custom initialization
//    }
//    return self;
//}

Теперь очистите и снова запустите. На этом этапе вы должны увидеть его изменение размера (убедитесь, что вы добавили ярлык с текстом или что-то для тестирования).

Убедитесь, что вы протестируете с помощью обычного класса UIViewController, а не подкласса. После того как вы увидите, что ваш размер виджета отвечает, попробуйте подкласс. Я потратил час сегодня, чтобы узнать, что использование UICollectionViewController просто не работает в Beta 2 (будет файл RADAR).

Ответ 2

Если вы используете схему приложения, а не схему виджетов, первое, что нужно проверить, это журнал устройства или журнал симулятора. Поскольку представление Today является частью системы, а не частью приложения, которое вы отлаживаете в Xcode, вы не увидите ошибок в контроллере представления виджетов на консоли Xcode. Вы можете проверить консоль симулятора в системном журнале:

Simulator's log

Если на контроллере виджетов произошел сбой, он будет показывать что-то вроде этого:

xxxxx.local Widget [43414]: завершение приложения из-за неотображения исключение "NSUnknownKeyException", причина: "[ TodayViewController0x7fd893d7ca60 > setValue: forUndefinedKey:]: этот класс не является ключевым для кодирования ключевых слов.

Если вы выберете вместо этого виджет, xcode присоединяет отладчик к виджету сегодняшнего вида, и если вы включили "точку останова" Все исключения ", вы сможете увидеть, есть ли исключение и где находится rised.

Widget target

Ответ 3

Прокомментируйте оригинальный метод init:

//    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
//        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
//        // Custom initialization
//    }

Добавьте этот метод init:

init(coder aDecoder: NSCoder!) {
   super.init(coder: aDecoder)
   // Custom initialization here
}

Очистите и создайте свой проект. Убедитесь, что содержимое вашего виджета имеет ограничение по высоте.

Ответ 4

Я немного потрудился с этим.

Затем я выяснил, что он пытался вывести высоту представления с использованием ограничений для всех подзонов в MainInterface.storyboard.

Если вы добавите все необходимые ограничения для своих представлений в представлении, тогда можно будет вывести высоту Today Extension, и ваше представление будет выглядеть так, как вы планируете.

Ответ 5

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

1) Если вы часто перезапускаете свой виджет с Xcode, его убивают на телефоне, и, похоже, система наказывает вас за это, неплохо всегда закрывать сегодняшнее представление, прежде чем убить своего виджета в Xcode, чтобы он получил "красиво" закончился вместо убитого Xcode

Решение: Иногда единственным решением является удаление виджета из сегодняшнего представления и его чтение (и даже иногда удаление приложения с телефона и его установка снова).

2) Я использовал фреймворк регистрации и каждый раз, когда я пытался загрузить данные на сервер, виджет застыл и больше не реагировал. Когда я закрыл центр уведомлений и снова открыл его, у меня была такая же проблема, как и у вас с пустой виджет сегодня или виджет 0 высотой сегодня.

Решение: Нехорошо, хотя, не загружая данные из кода виджета... действительно странная вещь есть, в отладочных сборках все работает отлично, но не в сборке релиза.