我的应用程序使用故事板,窗口必须使用自定义类MyWindow,或者在运行时/启动应用程序,有一条错误消息说:
Interface Builder文件中的未知Window类(null),而是创建通用Window
升级到Xcode 9.1之后我才注意到这一点,但我不确定它是否曾存在过.
类似的问题在这里:Xcode 6 Strange Bug:Interface Builder文件中的未知类
我的另一个项目没有这个问题.我稍后会调查.
在这两个项目中,窗口由自定义窗口控制器拥有.我检查了故事板xml但没有找到任何奇怪的东西.
为了证明这个问题,我做了一个vanilla Cocoa项目.这是AppDelegate.swift:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
weak lazy var isGood : NSNumber? = {
return true
}()
func doSomething() {
let result = isGood!
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode给出了这个:
unkown:0:错误:无法转换类型'NSNumber?'的返回表达式 (又名"可选")返回类型'NSNumber?'
unkown:0:不能指定'NSNumber?'类型的值?输入'NSNumber ??'
unkown:0:不能指定'NSNumber?'类型的值?输入'NSNumber ??'
在我的实际项目中,它是MyCustomClass(而不是NSNumber)的另一个对象.除类型外,错误相同MyCustomClass.
如果我删除weak或lazy从声明中删除,一切都很好.但我想从被+1保存引用计数,因为MyCustomClass是NSViewController这是一定要永远存在. …
在我的OS X应用程序(使用Cocoa)中,我想实现一个像Finder中的搜索字段(参见上面的屏幕截图).
我在考虑继承NSSearchField和NSSearchFieldCell.后者应负责管理"代币".我已阅读查看编程指南,控制和细胞编程主题和的文档NSTokenField[Cell],NSSearchField[Cell],NSCell.
我不清楚一些事情:
1)在子类中,如何重用可能提供的放大镜图标NSSearchFieldCell?这个图标是NSImage?它有一个动画,我应该学习什么如果我必须自己实现动画?
2)应该使用什么来实现下拉按钮(如示例图像中的"NAME"按钮).用于对搜索类别(例如"NAME")和关键字(例如"yh")进行分组的类是什么?"NAME"之后的"箭头"是什么?
我们也欢迎任何书籍,文章或其他资源建议.
一个类似的相关问题是带有令牌的搜索字段等邮件(Mac OS X 10.7)
自Yosemite以来,NSCell的用法发生了变化, 如何在不创建NSButtonCell子类的情况下创建自定义主题NSButton? 与该主题相关.单元格将被弃用,因此使用它是不明智的.
我读过一篇关于Swift中不变性/结构的文章。有一部分说:
在函数式编程中,副作用通常被认为是不好的,因为它们可能以意想不到的方式影响您的代码。例如,如果在多个位置引用了一个对象,则每个更改都会自动在每个位置发生。正如我们在简介中所看到的,在处理多线程代码时,这很容易导致错误:因为您可以从另一个线程修改您刚刚检查的对象,所以所有假设都可能无效。
使用Swift结构,变异不会有相同的问题。该结构的突变是局部副作用,仅适用于当前的结构变量。因为每个struct变量都是唯一的(或者换句话说:每个struct值都有一个所有者),所以几乎不可能以这种方式引入错误。除非您是跨线程引用全局结构变量,否则就是这样。
在银行帐户示例中,有时必须更改或替换帐户对象。使用a struct不足以保护帐户免受多线程更新帐户的困扰。如果我们使用一些锁或队列,也可以使用class实例代替struct,对吗?
我尝试编写一些不确定导致竞态条件的代码。主要思想是:两个线程都首先获取一些信息(的一个实例Account),然后根据获取的内容覆盖保存该信息的变量。
struct Account {
var balance = 0
mutating func increase() {
balance += 1
}
}
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// method1()
method2()
}
func method1() {
var a = Account(balance: 3) {
didSet {
print("Account changed")
}
}
// /sf/ask/3213876991/
let queue = DispatchQueue.global()
queue.async {
a.increase()
print("global: \(a.balance)")
}
DispatchQueue.main.async {
a.increase()
print("main: \(a.balance)")
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种同时实现这些目标的方法:
node_modules容器内部(不要"污染"主机上的工作目录)Dockerfile我不确定这些目标是否被视为"最佳实践".例如,保持node_modules在容器内部有其缺点.
目前我的撰写文件是这样的:
services:
# ...
node:
image: "node:9"
user: "node"
working_dir: /home/node/app
environment:
# - NODE_ENV=production
- NPM_CONFIG_PREFIX=/home/node/.npm-global
- PATH=$PATH:/home/node/.npm-global/bin
volumes:
- ./proj/:/home/node/app
- /home/node/app/node_modules # mark1
ports:
- "3001:3001"
command: >
bash -c "echo hello
&& ls -lh /home/node/app/
&& npm install
&& npm i -g babel-cli
&& npm i -g flow-bin
&& npm start"
depends_on:
- redis
Run Code Online (Sandbox Code Playgroud)
但是有
"Error: EACCES: permission denied, access'/home/node/app/node_modules'".
如果我注释掉该#mark1 …
我正在使用Xcode的Instruments来查看我的应用程序中是否有任何泄漏.但我发现图表有点令人困惑.该应用程序在完成某项工作时会得到一个交叉,但之后它只会得到减号.
引用计数最终似乎为零.我对阅读不太确定.
该官方文档有点过时.
cocoa ×3
swift ×3
macos ×2
xcode ×2
docker ×1
immutability ×1
node.js ×1
nswindow ×1
objective-c ×1
storyboard ×1
struct ×1
xcode7 ×1