【发布时间】:2015-05-04 17:52:03
【问题描述】:
问题:在设置窗口中布局的 QLPreviewView 对象的 previewItem 时获取线程 1:EXC_BAD_ACCESS(代码=1,地址=0x18)。
目标:创建一个应用程序,其中包含文件内容的预览和下面的控件,用于更改正在预览的文件的属性。预览必须与窗口的大小相关联,并对窗口的大小调整做出反应。
设置:
使用 Xcode 6.1.1,我使用 Swift 和 Storyboards 创建了一个默认的 OS X Cocoa 应用程序。
使用 Storyboards 进行布局,对象库中似乎没有 QLPreviewView 组件,因此我使用了自定义视图对象并将类设置为 QLPreviewView。然后我设置约束以允许预览视图随窗口框架调整大小。
然后,我将 QLPreviewView 类的自定义视图作为成员变量链接到 ViewController.swift 文件中。在 viewDidLoad() 方法中,我将 QLPreviewView 对象的 previewItem 添加到 QLPreviewItem 协议的实现中。我还添加了一个导入 Quartz。
这里是 ViewController.swift 的源代码,由 Xcode 生成,然后由我修改以添加 QLPreviewView 的设置。
//
// ViewController.swift
// PreviewTest
//
// Created by Derek on 2015-03-02.
// Copyright (c) 2015 Derek. All rights reserved.
//
import Cocoa
import Quartz
class ViewController: NSViewController {
@IBOutlet var preview: QLPreviewView!
override func viewDidLoad() {
super.viewDidLoad()
preview.previewItem = {final class PreviewItem : NSObject, QLPreviewItem {
var previewItemURL: NSURL! {return NSURL(fileURLWithPath: "/Users/derek/Pictures/Scan.jpeg")}
var previewItemTitle: String! {return "Test" }
}
return PreviewItem()
} ()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
设置 preview.previewItem 的行在应用程序运行时得到顶部描述的 EXC_BAD_ACCESS 错误。
我已经成功创建了一个 QLPreviewView 并将其嵌入到一个窗口中,但是我没有使用情节提要或约束,所以它的大小和位置不是由窗口管理的,这正是我想要的。
内联类 PreviewItem 工作正常。我尝试将其切换为独立类,然后将其创建为变量,然后将 QLPreviewView.previewItem 设置为变量。这与将 previewItem 设置为内联执行它的方式相同。
内联类 PreviewItem 在非情节提要的情况下也可以正常工作,并且文件 scan.jpeg 按预期显示。
当我以类似的方式设置其他 UI 对象(如文本字段)时,它们可以正常工作。
我希望找出我在这里做错了什么以及如何纠正它。或有关如何以不同方式实现此目标的建议。
【问题讨论】:
标签: xcode cocoa swift storyboard osx-yosemite