使用未解析的标识符:kCGWindowImageDefault(和其他Core Graphics常量)

时间:2018-02-13 04:15:47

标签: swift macos cocoa core-graphics

我是Swift开发的新手。我在Swift中为MacOS(而不是iOS)编写了一个应用程序,我正在尝试调整this Apple sample Objective-C project中的一些代码,以便在我的程序中使用。

我遇到的问题是,某些Apple定义的常量(例如kCGWindowImageDefaultkCGWindowListOptionAll)导致XCode报告编译时错误"使用未解析的标识符[标识符]"

有些令人惊讶的是,如果我右键单击kCGWidowImageDefault并选择"跳转到定义",XCode 跳转到该常量的定义(在CoreGraphics中) > CGWindow.h> CGWindowImageOption) - 所以XCode似乎知道那个常量是什么。

以下是我的ViewController.swift文件的相关摘要:

import Cocoa
import CoreGraphics

class ViewController: NSViewController {

...

    func myFunction() {

        // *** XCode reports the error on kCGWindowImageDefault on this line:
        let imageOptions : CGWindowImageOption = kCGWindowImageDefault 

        ...
    }
}

Apple文档(如上所述)并未指出要使用这些常量需要import

XCode 似乎成功识别出我使用的类型CGWindowImageOption - 它只是它不识别的常数。

为了能够在我的Swift MacOS程序中成功使用kCGWindowImageDefault和类似的常量,我需要做些什么?

1 个答案:

答案 0 :(得分:2)

java.lang.IllegalArgumentException: Unexpected composite type for ThreadInfo at sun.management.ThreadInfoCompositeData.validateCompositeData(ThreadInfoCompositeData.java:372) at sun.management.ThreadInfoCompositeData.getInstance(ThreadInfoCompositeData.java:68) at java.lang.management.ThreadInfo.<init>(ThreadInfo.java:263) at java.lang.management.ThreadInfo.from(ThreadInfo.java:794) Caused: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.fromCompositeData(DefaultMXBeanMappingFactory.java:1018) Caused: java.io.InvalidObjectException: Failed to invoke from(CompositeData) at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.invalidObjectException(DefaultMXBeanMappingFactory.java:1457) at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.fromCompositeData(DefaultMXBeanMappingFactory.java:1021) at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeMapping.fromNonNullOpenValue(DefaultMXBeanMappingFactory.java:919) at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$NonNullMXBeanMapping.fromOpenValue(DefaultMXBeanMappingFactory.java:133) at com.sun.jmx.mbeanserver.ConvertingMethod.fromOpenReturnValue(ConvertingMethod.java:131) at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(MXBeanProxy.java:168) at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:258) Caused: java.lang.reflect.UndeclaredThrowableException at com.sun.proxy.$Proxy14.getThreadInfo(Unknown Source) at com.sun.tools.visualvm.jmx.impl.JmxSupport.isReadOnlyConnection(JmxSupport.java:126) at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.isTakeThreadDumpSupported(JmxModelImpl.java:369) at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.resolveThreads(ApplicationThreadsViewProvider.java:85) at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.supportsViewFor(ApplicationThreadsViewProvider.java:49) at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.supportsViewFor(ApplicationThreadsViewProvider.java:45) at com.sun.tools.visualvm.core.ui.DataSourceViewsManager.getViews(DataSourceViewsManager.java:136) at com.sun.tools.visualvm.core.ui.DataSourceWindowManager.openWindowAndAddView(DataSourceWindowManager.java:206) at com.sun.tools.visualvm.core.ui.DataSourceWindowManager.access$000(DataSourceWindowManager.java:50) at com.sun.tools.visualvm.core.ui.DataSourceWindowManager$2.run(DataSourceWindowManager.java:117) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303) 仅适用于Objective-C,而不适用于Swift。在Swift中,kCGWindowImageDefaultCGWindowImageOption。对于默认设置,您只需使用空选项集:

OptionSet

对于let imageOptions : CGWindowImageOption = [] ,你可以这样做:

CGWindowListOption

请务必查看这些枚举的Swift参考文档。您不能使用Objective-C值。