«NSInvalidArgumentException», причина: «Невозможно разобрать формат ограничения»

У меня есть subview, что я хочу держать остановки во вращающемся экране, поэтому я решил поместить тип NSLayoutConstraint:

Запуск пространства для наблюдения
Верхнее пространство для наблюдения
Кнопка «Пробел» для просмотра
Я в подклассе UITableViewCell. Я написал код, но я получаю следующую ошибку:

'NSInvalidArgumentException', reason: 'Unable to parse constraint format: self is not a key in the views dictionary. H:[self.arrows]-5-| 

Мой код в CustomCell.m:

  self.arrows = [[Arrows alloc]initWithFrame:CGRectMake(self.contentView.bounds.size.width-30, self.bounds.origin.y+4, 30, self.contentView.bounds.size.height-4)]; NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self.arrows, self.contentView); NSMutableArray * constraint=[[NSMutableArray alloc]init]; [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H: [self.arrows]-5-|" options:0 metrics:nil views:viewsDictionary]]; [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-1-[self.arrows]" options:0 metrics:nil views:viewsDictionary]]; [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[V: [self.arrows]-1-|" options:0 metrics:nil views:viewsDictionary]]; [self.arrows addConstraints:constraint]; 

4 Solutions collect form web for “«NSInvalidArgumentException», причина: «Невозможно разобрать формат ограничения»”

Похоже, что механизм синтаксического анализа визуального форматирования autolayout интерпретирует « . » В вашем ограничении VFL как keyPath вместо того, чтобы использовать ключ valueForKeyPath:

NSDictionaryOfVariableBindings(...) возьмет любой ваш параметр в скобках и переведет его в буквенный ключ с объектом в качестве значения (в вашем случае: @{"self.arrow" : self.arrow} ). В случае VFL автозапуск думает, что у вас есть ключ с именем self в вашем словаре словарей с подзадачом (или подобъектом), который имеет ключ arrow ,

 @{ @"self" : @{ @"arrow" : self.arrow } } 

когда вы буквально хотели, чтобы система интерпретировала ваш ключ как « self.arrow ».

Обычно, когда я использую переменную getper экземпляра, как это, я, как правило, создаю свой собственный словарь вместо использования NSDictionaryOfVariableBindings(...) следующим образом:

 NSDictionary *views = @{ @"arrowView" : self.arrow } 

или

 NSDictionary *views = NSDictionaryOfVariableBindings(_arrow); 

Это позволит вам использовать представление в вашем VFL без себя, и вы все еще знаете, о чем говорите:

 NSArray *arrowHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[arrowView]-5-|" options:0 metrics:nil views]; 

или

 NSArray *arrowHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[_arrow]-5-|" options:0 metrics:nil views]; 

Как правило, я научился не использовать словарные ключи с точкой ( . ) В них, чтобы избежать путаницы в системе или отладки кошмаров.

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

 @interface ViewController () @property (strong) UIButton *myButton; @property (strong) UILabel *myLabel; @end ... UIButton *myButtonP = self.myButton; UILabel *theLabelP = self.myLabel; NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(myButtonP, myLabelP); 

Суффикс P предназначен для «указателя».

Самое простое решение – избегать геттеров для переменных из вашего собственного класса и переопределять переменные из суперклассов в качестве локальных переменных. Решение для вашего примера

 UIView *contentView = self.contentView; NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_arrows, contentView); 

Удостоверьтесь, что вы добавили ограничения после добавления требуемого subview к основному виду. Некоторое время он получал знания, связанные с этой проблемой.

  • На iOS, каковы различия между полями, кросс-вставками, вставками содержимого, выравниванием прямоугольников, макетами макета ...?
  • Синхронизация макета UIView с кадрами OpenGL
  • Почему мой планшет iPad не корректируется при вращении?
  • Интерфейс Builder: что такое UIView Layout iOS 6/7 Deltas?
  • Пространство между последними 2 строками абзаца больше?
  • UIView скрытое свойство ... есть ли еще больше?
  • Страница PhoneGap прокручивается вверх после появления клавиатуры в устройствах iOS, что приводит к повреждению страницы PhoneGap
  • iPhone: проблемы с полупрозрачным черным uistatusbar с видом макета
  • Есть ли UIView, как WPF Grid?
  • UICollectionView - упорядочить ячейки по горизонтали
  • Пользовательский макет для просмотра коллекции в swift?
  • Interesting Posts

    SKNode следует за другим SKNode в границах SKConstraint

    Развертывание приложения iOS с помощью программы разработчика Apple Enterprise

    Обновлять / отзывать сертификаты распространения ios – влияние на пользователей ad-hoc

    После того, как проект переместился в другое место, путь ссылки на структуры

    iOS – Установите пунктирную линию для круга

    UISplitViewController – отклонение / всплытие Подробный просмотр контроллера в коде в спящем режиме

    Ошибка компоновщика в iOS (дубликаты символов для архитектуры x86_64)

    как получить текущий размер подвью, когда размер устройства изменяется быстро?

    как установить значение переменной NSNumber (без создания нового объекта) в объекте-c

    Настройка настраиваемых свойств для пользовательских открываемых объектов графа с помощью Facebook iOS SDK

    UIAutomation: проверьте, существует ли элемент перед нажатием

    Realm + Mantle: как избежать множественного дублирования наследования при интеграции обеих фреймворков?

    Как создать приложение журнала на iOS 9 и более поздних версиях?

    Каковы поддерживаемые языки с помощью AVSpeechSynthesizer?

    Кнопка «Бар» Элемент только в одной панели навигации контроллера панели вкладок

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