Apple建议使用以下代码检测是在iPad上运行还是在iPhone/iPod Touch上运行:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
// [for example, load appropriate iPad nib file]
}
else {
// The device is an iPhone or iPod touch.
// [for example, load appropriate iPhone nib file]
}
Run Code Online (Sandbox Code Playgroud)
问题是在3.2之前的SDK中没有定义UI_USER_INTERFACE_IDIOM()和UIUserInterfaceIdiomPad.这似乎完全打败了这种功能的目的.它们只能在iPhone OS 3.2上编译和运行(iPhone OS 3.2只能在iPad上运行).因此,如果您可以使用UI_USER_INTERFACE_IDIOM(),结果将始终是指示iPad.
如果您包含此代码和目标OS 3.1.3(最新的iPhone/iPod Touch OS)以测试您的iPhone绑定的通用应用程序代码,您将收到编译器错误,因为符号未在3.1.3或更早版本中定义,为iPhone模拟器3.1.3编译时.
如果这是Apple推荐的运行时设备检测方法,那么我做错了什么?有没有人成功使用这种方法进行设备检测?
@FetchRequest 上有很多问题的答案提供了强制 SwiftUI 重绘视图的解决方法。我找不到解决这个问题的任何内容。
我的应用程序使用共享扩展将新项目插入到我的CoreData
模型 (sqlite) 中。框架在主应用程序和共享扩展目标之间共享。ContentView
我的应用程序中的主要 SwiftUI使用一个@FetchRequest
属性来监视数据库的内容并更新视图:
struct ContentView: View {
@FetchRequest(fetchRequest: MyObj.allFetchRequest()) var allObjs: FetchedResults<MyObj>
...
}
Run Code Online (Sandbox Code Playgroud)
我的 xcdatamodel 扩展为:
public static func allFetchRequest() -> NSFetchRequest<MyObj> {
let request: NSFetchRequest<MyObj> = MyObj.fetchRequest()
// update request to sort by name
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
return request
}
Run Code Online (Sandbox Code Playgroud)
共享扩展使用以下方法添加一个新项目:
let newObj = MyObj(context: context)
newObj.name = "new name"
try! context.save()
Run Code Online (Sandbox Code Playgroud)
使用共享扩展添加新项目后,当我通过在设备上切换应用程序返回到我的应用程序时,SceneDelegate
检测到sceneDidBecomeActive
. 在这个函数中,我可以手动运行一个 fetch 请求并看到新项目已经添加。我什至可以使用其他 SO 问题的答案来诱使 UI 在 …
对于非系统字体,将usesSingleLineMode设置为true会导致文本的顶部被剪裁.
我创建了3个非常简单的测试用例来说明这一点:
将以下内容添加到新Cocoa OSX应用程序的viewDidLoad()方法中:
// Do any additional setup after loading the view.
let good = NSTextField(frame: NSRect(x: 0, y: 0, width: 800, height: 55))
good.usesSingleLineMode = false
good.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24)
good.stringValue = "Good usesSingleLineMode false "
self.view.addSubview(good)
let bad = NSTextField(frame: NSRect(x: 0, y: 100, width: 800, height: 55))
bad.usesSingleLineMode = true
bad.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24)
bad.stringValue = "Bad usesSingleLineMode true"
self.view.addSubview(bad) …
Run Code Online (Sandbox Code Playgroud) 我能够安装和使用IBM DB2 Express-C 9.5.2.在Mac OS X Snow Leopard中测试没有任何问题.但是,在Mac OS X 10.7 Lion中,使用db2setup脚本的安装失败了:
DBI1189E尝试在映像上使用db2setup,该平台与正在运行它的当前平台"Darwin [x86_64]"不匹配.
我如何解决这个问题,在Lion上安装DB2 Express-C?
编辑:移动答案的答案
对于某些视图类型(包括)NSAnimationContext.runAnimationGroup(_:_:)
,按照NSAnimationContext
文档中的演示使用动画框架原点和大小可以正常工作NSImageView
。但是,NSButton
除非我在动画后添加明确的帧大小更改,否则它不会按预期工作
动画帧大小 NSImageView
对于 NSImageView,以下内容按预期工作。它被移动到原点,并调整为 200x200:
NSAnimationContext.runAnimationGroup({(let context) -> Void in
context.duration = 2.0
// Get the animator for an NSImageView
let a = self.theImage.animator()
// Move and resize the NSImageView
a.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
}) {
print("Animation done")
}
Run Code Online (Sandbox Code Playgroud)
动画帧大小 NSButton
使用 NSButton 执行相同操作时,按钮将移动但不会调整大小:
NSAnimationContext.runAnimationGroup({(let context) -> Void in
context.duration = 2.0
// Get the …
Run Code Online (Sandbox Code Playgroud) 这是来自终端的简单任务:
defaults delete -g <key>
Run Code Online (Sandbox Code Playgroud)
我想在 Swift 中使用NSUserDefaults
. 该文件说:
如果要更改全局域中首选项的值,请使用新值将相同的首选项写入应用程序域。
这只是为应用程序域中的相同键设置一个新值,以便NSUserDefaults
将来检索该键的值时,它会在搜索全局域之前在应用程序域中找到新值。
有没有办法:
使用NSUserDefaults
?
例如,我知道我可以使用 NSTask 来运行defaults delete -g <key>
,但我认为这是一种解决方法(有效的方法)。
关于这个主题有几个有用的问题,但我发现要么使用早期测试版中已弃用的语法(例如,BindableObject),要么不需要传递绑定(例如,到 Toggle)。
我想创建一个绑定到数组中元素的切换列表。我尝试了很多方法,但语法总是不正确。下面的版本与现有问题的答案最接近。
struct Item: Identifiable {
var id: String { self.name }
var name: String
var enabled: Bool
}
final class ItemSet: ObservableObject {
@Published var items: [Item]
init() {
items = [
Item(name: "aaa", enabled: true),
Item(name: "bbb", enabled: false),
Item(name: "ccc", enabled: true)
]
}
}
var myItems = ItemSet()
struct ContentView: View {
@ObservedObject var items: ItemSet
var body: some View {
List {
ForEach(items.items) { item in
Toggle(item.name, isOn: $item.enabled)
}
}
} …
Run Code Online (Sandbox Code Playgroud)