小编dro*_*ang的帖子

如何让UI_USER_INTERFACE_IDIOM()与iPhone OS SDK <3.2一起使用

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推荐的运行时设备检测方法,那么我做错了什么?有没有人成功使用这种方法进行设备检测?

iphone ipad iphone-sdk-3.2

32
推荐指数
5
解决办法
4万
查看次数

当更改源是共享扩展时,@FetchRequest 结果不会在 SwiftUI 中更新

@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 在 …

core-data ios swift swiftui

11
推荐指数
1
解决办法
1511
查看次数

当usesSingleLineMode为true时,NSTextField非系统字体内容被剪裁

对于非系统字体,将usesSingleLineMode设置为true会导致文本的顶部被剪裁.

我创建了3个非常简单的测试用例来说明这一点:

  • good:非系统字体,其中usesSingleLineMode = false.工作良好.
  • bad:使用usesSingleLineMode = true的非系统字体.不行.
  • system:使用usesSingleLineMode = true的系统字体.工作良好.

将以下内容添加到新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)

macos cocoa nstextfield swift

7
推荐指数
1
解决办法
567
查看次数

如何在Mac OS X 10.7 Lion上安装IBM DB2 Express-C?

我能够安装和使用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?

编辑:移动答案的答案

db2 macos osx-lion

5
推荐指数
1
解决办法
4990
查看次数

NSAnimationContext 不会为 NSButton 设置帧大小动画

对于某些视图类型(包括)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)

macos cocoa animation nsanimationcontext swift

5
推荐指数
1
解决办法
1834
查看次数

如何以编程方式从 NSGlobalDomain 中删除首选项?

这是来自终端的简单任务:

defaults delete -g <key>
Run Code Online (Sandbox Code Playgroud)

我想在 Swift 中使用NSUserDefaults. 该文件说:

如果要更改全局域中首选项的值,请使用新值将相同的首选项写入应用程序域。

这只是为应用程序域中的相同键设置一个新值,以便NSUserDefaults将来检索该键的值时,它会在搜索全局域之前在应用程序域中找到新值。

有没有办法:

  1. 从 NSGlobalDomain 中删除密钥,或
  2. 为 NSGlobalDomain 中的键设置一个新值

使用NSUserDefaults?

例如,我知道我可以使用 NSTask 来运行defaults delete -g <key>,但我认为这是一种解决方法(有效的方法)。

macos cocoa nsuserdefaults swift

2
推荐指数
1
解决办法
638
查看次数

如何从对象数组创建切换绑定?

关于这个主题有几个有用的问题,但我发现要么使用早期测试版中已弃用的语法(例如,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)

swift swiftui

1
推荐指数
1
解决办法
1125
查看次数