小编Jaa*_*nus的帖子

如何创建Core Data谓词来测试关系是否包含所有给定对象?

建立:

我有一个与B具有to-many关系的Core Data对象A.调用关系"items".因此,a.items返回与A关联的所有Bs.

现在,我有一个手动组成的B对象的NSSet"itemSet".

我想做以下事情:

return all A objects whose "items" relation exactly matches itemSet
Run Code Online (Sandbox Code Playgroud)

如何为此构造谓词?我试过这个:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"(ALL items in %@)", itemSet];
Run Code Online (Sandbox Code Playgroud)

但那只是给了我Unsupported predicate (null).

这个:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"(items in %@)", itemSet];
Run Code Online (Sandbox Code Playgroud)

告诉我unimplemented SQL generation for predicate.有趣,但没有帮助.

那么用一组过滤关系的正确方法是什么?

core-data nsset nspredicate

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

如何设置弧/圆环段的行程和长度变化的动画

草图

我需要在以下场景中为弧形(也称为圆环线段)设置动画,其中弧线保持与假想圆心的恒定半径r(圆弧位于圆的正外方).

1)将弧形笔划宽度从x设置为y,同时保持半径r和角度α.

2)将弧角从α变为β,同时保持恒定的行程宽度和半径.

3)一起做1和2但可能有独立的动画/时间.

这是我到目前为止所拥有的:

我已经将弧绘图实现为一个自定义视图,只需使用CGContextAddArc绘制弧.这适用于静态弧,但它不会为任何动画制作动画.

此外,我知道如何使用[UIBezierPath addClip]之类的东西绘制剪切图像.

后者很有意思,因为我认为对于场景1,我可以通过两种方式达到预期的效果:保持绘制弧线并修改笔划和半径以保持相同的感知内圈半径(我不乐观,我担心半径会"摇晃"),或绘制一个尺寸增大的圆的一段(可能只是通过仿射变换修改比例),然后用静态圆形蒙版剪裁.

现在,我如何将所有这些概念归结为一些实际的绘图代码?我不需要真正的代码(虽然那也没关系),但更像是一个概念方法,比如,我可以用自定义绘图的UIView完成所有这些,或者我们是否需要谈​​论我理解的自定义关键动画涉及CALayers等.换句话说,什么是正确的架构来完成所有这些最简单的编码,同时从合成的角度为平滑动画提高效率?

cocoa-touch core-animation core-graphics ios

9
推荐指数
2
解决办法
4772
查看次数

如何使用通配符域实现Android App链接?

Android提供了有关如何实施应用链接的指南.也就是说,如果我的应用程序声明它处理某些Web链接,并且我尝试在任何其他应用程序中打开此链接,系统会拦截此操作并将用户直接转到我的应用程序而不是浏览器,以便我可以显示相关内容内容直接在我的应用程序.非常便利.

我在指南中遗漏的是两件事:

  1. 如何使用通配符域实现应用程序链接.我希望我的应用程序能够处理*.example.com的链接,subdomains即example.com的所有链接(test.example.com,something.example.com等);

  2. 如何仅将应用程序链接实现到我网站上的特定路径.例如,我想拦截test.example.com/something,但不是test.example.com/other.第一个应该来到我的应用程序,另一个应该到我的浏览器;

相应的iOS指南显示iOS处理这两种情况(虽然通配符部分从文档中不清楚,我不得不向Apple支持部门澄清,您需要将关联文件放在根域,而不是子域).

Android App Links可以处理通配符域,只处理路径的子集吗?

android ios applinks

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

Objective-C/iPhone的优秀HTTP库?

更新:这个问题显然已经过时(见日期).我建议只使用像NSURLSession这样的现代iOS7功能.我猜这个问题保留了历史的准确性.

什么是(桌面Cocoa和)iPhone的优秀HTTP库?应该只有一个很好的接口,如HTTP标头,获取/发布值(请求字符串创建,URL编码/解码),同步和异步请求......最好是纯粹的Obj-C实现.NSURL*有点缺乏.

iphone cocoa http objective-c

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

帮助跨两个属性对NSArray进行排序(使用NSSortDescriptor?)

我有点像NSSortDescriptor n00b.不过,我认为它是我需要做的正确工具:

我有一个由带有键的对象组成的NSArray,比如"name"和"time".这是一个例子,而不是用语言表达它:

input:

name: time
B: 4
C: 8
B: 5
C: 4
A: 3
C: 2
A: 1
A: 7
B: 6


desired output:

name: time
A: 1 <---
A: 3
A: 7
C: 2 <---
C: 4
C: 8
B: 4 <---
B: 5
B: 6
Run Code Online (Sandbox Code Playgroud)

因此,值按"时间"排序,并按"名称"分组.A首先是因为他的时间值最小,而A的所有值都是相继的.然后是C,他的所有价值都是第二小的时间价值.我已经指出了确定名称排序方式的值; 在每个名称组中,按时间排序.

如何以最有效的方式从输入到输出NSArray?(cpu-和内存方面,不一定是代码方式.)我如何为此构造NSSortDescriptors,或使用任何其他方法?我不想自己动手,除非这是最有效的方式.

sorting cocoa nsarray nssortdescriptor

8
推荐指数
2
解决办法
2万
查看次数

当将已删除的行作为NSFetchedResultsControllerDelegate处理时,NSTableView为什么会崩溃?

我使用的是NSTableView + CoreData + NSFetchedResultsController的相当标准的设置,相关的视图控制器为NSFetchedResultsControllerDelegate来接收更改。这是来自视图控制器的相关代码位:

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?){

    print("Change type \(type) for indexPath \(String(describing: indexPath)), newIndexPath \(String(describing: newIndexPath)). Changed object: \(anObject). FRC by this moment has \(String(describing: self.frc?.fetchedObjects?.count)) objects, tableView has \(self.tableView.numberOfRows) rows")

    switch type {
    case .insert:
        if let newIndexPath = newIndexPath {
            tableView.insertRows(at: [newIndexPath.item], withAnimation: .effectFade)
        }
    case .delete:
        if let indexPath = indexPath {
            tableView.removeRows(at: [indexPath.item], withAnimation: .effectFade)
        }
    case .update:
        if let indexPath = …
Run Code Online (Sandbox Code Playgroud)

core-data nstableview appkit nsfetchedresultscontroller

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

如何使用 SwiftUI 将项目添加到 NSToolbar?

考虑使用应用程序委托生命周期实现的 macOS 应用程序代码:

应用程序委托:

func applicationDidFinishLaunching(_ aNotification: Notification) {
        let contentView = ContentView()
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.toolbar = NSToolbar(identifier: "toolbar")
        window.title = "hello title"
        window.subtitle = "hello subtitle"
        window.isReleasedWhenClosed = false
        window.center()
        window.setFrameAutosaveName("Main Window")
        window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)
    }
Run Code Online (Sandbox Code Playgroud)

斯威夫特用户界面:

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink(
                    destination: ItemView(),
                    label: {
                        Label("Something", systemImage: …
Run Code Online (Sandbox Code Playgroud)

macos nstoolbar swiftui

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

如何为同一个viewcontroller为不同的设备方向加载不同的XIB?

文档说如果我想支持肖像和风景,我基本上有两种方法:

  1. 设置viewcontroller的视图,以便子视图正确自动调整大小并在运行时以编程方式进行较小的更改
  2. 如果更改更具实质性,请创建备用横向界面并在运行时推送/弹出备用模式视图控制器

我想提供布局大不相同的信息,但逻辑是相同的.理想情况下,我会为同一个viewcontroller加载另一个XIB,但它似乎不是一个选项.

听起来像#2是我需要做的,但我的问题是听起来它会使用标准的modalviewcontroller动画,它们与设备旋转动画完全不同.(当然,作为我的懒惰人,我没有测试这个假设.)

那么,如何使用相同的viewcontroller但不同的XIB为landscape添加替代布局?我应该使用上面的方法#2并且旋转动画是自然的吗?或者还有其他方式吗?

iphone layout rotation uiviewcontroller ios

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

如何为设备和服务器之间的元数据同步设计高级应用程序协议和数据格式?

我正在寻找有关如何最好地考虑设计高级应用程序协议以在最终用户设备和服务器之间同步元数据的指导.

我的目标:用户可以在任何设备或网络上与应用程序数据进行交互.此协议的目的是通过服务器将在一个端点上进行的更改传达给其他端点,并确保所有设备都保持应用程序数据的一致性.如果用户在一台设备或Web上进行更改,协议会将数据推送到中央存储库,其他设备可以从中央存储库中提取数据.

其他一些设计思路:

  • 我将其称为"元数据同步",因为有效载荷将非常小,形式为对象ID和关于这些ID的小元数据.当客户端端点通过此协议检索新元数据时,它们将基于此元数据从外部源获取实际对象数据.获取"真实"对象数据超出了范围,我只是在谈论元数据同步.
  • 使用HTTP进行传输,使用JSON进行有效负载容器.问题基本上是关于如何最好地设计JSON有效负载模式.
  • 我希望在Web上以及桌面和移动设备上轻松实现和维护.最好的方法是简单的基于计时器或基于事件的HTTP请求/响应,而没有任何持久性通道.此外,你不应该有博士学位阅读它,我希望我的规格适合2页,而不是200页.
  • 身份验证和安全性超出了此问题的范围:假设请求是安全的并经过身份验证.
  • 目标是设备上数据的最终一致性,它并非完全是实时的.例如,用户可以在离线时在一台设备上进行更改.再次上线时,用户将执行"同步"操作以推送本地更改并检索远程更改.
  • 话虽如此,协议应该支持这两种操作模式:
    • 在设备上从头开始,应该能够拉出整个元数据图片
    • "随时随地同步".当并排查看两个设备上的数据并进行更改时,应该很容易将这些更改推送为其他设备可以近实时接收的短消息(取决于它何时决定联系服务器进行同步).

作为一个具体的例子,你可以想到Dropbox(它不是我正在研究的,但它有助于理解模型):在一系列设备上,用户可以管理文件和文件夹 - 移动它们,创建新的,删除旧的等.在我的上下文中,"元数据"将是文件和文件夹结构,但不是实际的文件内容.元数据字段将类似于文件/文件夹名称和修改时间(所有设备应该看到修改的同一时间).

另一个例子是IMAP.我没有阅读协议,但我的目标(减去实际的消息体)是相同的.

感觉有两个宏大的方法如何做到这一点:

  • 交易消息.系统中的每个更改都表示为delta,端点与这些增量进行通信.示例:DVCS变更集.
  • REST:将对象图作为一个整体或部分进行通信,而不必过多担心单个原子的变化.

编辑:一些答案正确地说,有关该应用程序的信息不足以提供足够好的建议.该应用程序的确切性质可能会分散注意力,但一个非常基本的RSS阅读应用程序是一个足够好的近似.所以我们假设应用规范如下:

  • 有两个类:提要和项目.
  • 我可以添加,重命名和删除Feed.添加订阅订阅它并开始接收该订阅源的项目.我还可以在UI中重新排序Feed显示顺序.
  • 当我读取项目时,它们被标记为已读.我无法将它们标记为未读或与它们做任何其他事情.
  • 基于以上所述,对象模型是:
    • "feed"具有属性"url","displayName"和"displayOrder"(displayOrder是UI的供稿列表中的供稿索引;在本地重新排序供稿会更改所有供稿的displayOrder,以使索引保持唯一且顺序).
    • "item"具有属性"url"和"unread",以及多对一关系"feed"(每个项目属于一个Feed)."url"也表现为项目的GUID.
    • 实际项目内容在每台设备上本地下载,不属于同步.

基于这种设计,我可以在一台设备上设置我的应用程序:添加一堆供稿,重命名并重新排序它们,并读取它们上的一些项目,然后标记为未读取.当我切换设备时,其他设备可以同步配置并向我显示具有相同名称,顺序和相同项目读取/未读状态的相同馈送列表.

(结束编辑)

我想在答案中:

  • 我遗漏了什么重要的东西?限制,目标?
  • 有什么好的背景阅读?(我意识到这就是许多计算机科学课程在很长的篇幅和细节上谈论的内容......我希望通过查看一些速成课程或掘金来使其短路.)
  • 这些协议的一些很好的例子,我可以建模,甚至开箱即用?(我上面提到了Dropbox和IMAP ......我应该阅读IMAP RFC.)

architecture distributed protocols network-protocols

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

重新加载一批UICollectionView或UITableView的好算法有什么变化吗?

设置:我有一个UICollectionViewUITableView那个由简单的数组数据源支持.我在控制器中保留了该数据源的副本.

现在,我从系统收到一条通知,告知有新数据可用.我得到一个新的数组,其中可能已添加,删除和更改位置的项目.

所以现在我有两个数据对象:

  • 以前的数组与UI当前显示的数据同步
  • 已添加,删除,移动项目的新数组

为了使UI与新数组同步,我需要生成一堆UI调用.如果是UICollectionView,那些是

- (void)insertItemsAtIndexPaths:(NSArray *)indexPaths
- (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
- (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths
Run Code Online (Sandbox Code Playgroud)

还有一套类似的方法UITableView.

我特别不想重新加载整个表,因为这比仅使用几个项目更昂贵.

因此,问题是:给定前一个和新的数据源数组,如何生成正确的UI调用集,以及何时"换出"旧的数据源为新的?

uitableview ios uicollectionview

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