2017-02-01 3 views
0

Я создал приложение на основе документов, которое должно сохранить NSAttributedString с изображением в пакет. Я запустил приложение и добавил изображение в текстовое представление и сохранил его. Когда я открыл файл, диалоговое окно сказал, что «документ„х“не может быть открыт», и это было напечатано на консоль:Обнаруженные недостающие ограничения для NSTextView

[Layout] Detected missing constraints for <NSTextField: 0x100b3f480>. It cannot be placed because there are not enough constraints to fully 
define the size and origin. Add the missing constraints, or set 
translatesAutoresizingMaskIntoConstraints=YES and constraints will be generated for you. If this view is laid out manually on macOS 10.12 and later, 
you may choose to not call [super layout] from your override. Set a breakpoint on DETECTED_MISSING_CONSTRAINTS to debug. This error will only be logged once. 

Document.swift:

enum CookRecipesFileNames : String { 

    case notes = "Notes.rtfd" 
} 

class Document: NSDocument { 

    var documentFileWrapper = FileWrapper(directoryWithFileWrappers: [:]) 

    var popover : NSPopover? 

    var notes : NSAttributedString = NSAttributedString() 

    ... 

    override class func autosavesInPlace() -> Bool { 
     return true 
    } 

    override func fileWrapper(ofType typeName: String) throws -> FileWrapper { 

     let notesRTFdata = try self.notes.data(from: NSRange(0..<self.notes.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFDTextDocumentType]) 

     if let oldTextFileWrapper = self.documentFileWrapper.fileWrappers?[CookRecipesFileNames.notes.rawValue] { 
      self.documentFileWrapper.removeFileWrapper(oldTextFileWrapper) 
     } 

     self.documentFileWrapper.addRegularFile(withContents: notesRTFdata, preferredFilename: CookRecipesFileNames.notes.rawValue) 

     return self.documentFileWrapper 
    } 

    override func read(from fileWrapper: FileWrapper, ofType typeName: String) throws { 
     guard let documentNotesData = fileWrappers[CookRecipesFileNames.notes.rawValue]?.regularFileContents else { 
      throw err(.cannotLoadNotes) 
     } 

     guard let documentNotes = NSAttributedString(rtfd: documentNotesData, documentAttributes: nil) else { 
      throw err(.cannotLoadNotes) 
     } 

     self.documentFileWrapper = fileWrapper 

     self.notes = documentNotes 
    } 

} 

Любая помощь быть оцененным!

+1

Вы установили какие-либо ограничения в Interface Builder или программно? – dylanthelion

+0

установить их в построителе интерфейса – paper1111

+0

Хорошо, я добавлю ответ. – dylanthelion

ответ

0

Предупреждение «Обнаруженные недостатки ...» является предупреждением об установке, сообщая вам, что вы добавили ограничения в представление, но недостаточно для определения координат x и y, а также высоты и ширины для представления. Если вы не добавите ограничений в IB (опция здесь должна удалить их все), Xcode сообщит приложению, чтобы использовать точное положение и размеры, используемые в IB. Если вы добавите ЛЮБЫЕ ограничения в представление, вы должны добавить достаточно, чтобы определить обе координаты и оба измерения. Если вы хотите сохранить свои ограничения (это второй вариант), перейдите к IB и найдите желтую или красную предупреждающую ошибку в левом верхнем углу: See this screenshot

Это даст вам список отсутствующих и противоречивых ограничений в контроллере просмотра.

+1

Ошибка не ошибка компилятора, хотя – paper1111

+0

Вы правы, извините за ошибку в моем ответе. Это предупреждение о строительстве, и общее. У вас есть стрелка предупреждения в IB? – dylanthelion

+0

Нет, у меня его нет. См. Фото здесь: [http://i.imgur.com/pLdBGKG.png](http://i.imgur.com/pLdBGKG.png) – paper1111

Смежные вопросы