建立:
我有一个与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.有趣,但没有帮助.
那么用一组过滤关系的正确方法是什么?

我需要在以下场景中为弧形(也称为圆环线段)设置动画,其中弧线保持与假想圆心的恒定半径r(圆弧位于圆的正外方).
1)将弧形笔划宽度从x设置为y,同时保持半径r和角度α.
2)将弧角从α变为β,同时保持恒定的行程宽度和半径.
3)一起做1和2但可能有独立的动画/时间.
这是我到目前为止所拥有的:
我已经将弧绘图实现为一个自定义视图,只需使用CGContextAddArc绘制弧.这适用于静态弧,但它不会为任何动画制作动画.
此外,我知道如何使用[UIBezierPath addClip]之类的东西绘制剪切图像.
后者很有意思,因为我认为对于场景1,我可以通过两种方式达到预期的效果:保持绘制弧线并修改笔划和半径以保持相同的感知内圈半径(我不乐观,我担心半径会"摇晃"),或绘制一个尺寸增大的圆的一段(可能只是通过仿射变换修改比例),然后用静态圆形蒙版剪裁.
现在,我如何将所有这些概念归结为一些实际的绘图代码?我不需要真正的代码(虽然那也没关系),但更像是一个概念方法,比如,我可以用自定义绘图的UIView完成所有这些,或者我们是否需要谈论我理解的自定义关键动画涉及CALayers等.换句话说,什么是正确的架构来完成所有这些最简单的编码,同时从合成的角度为平滑动画提高效率?
Android提供了有关如何实施应用链接的指南.也就是说,如果我的应用程序声明它处理某些Web链接,并且我尝试在任何其他应用程序中打开此链接,系统会拦截此操作并将用户直接转到我的应用程序而不是浏览器,以便我可以显示相关内容内容直接在我的应用程序.非常便利.
我在指南中遗漏的是两件事:
如何使用通配符域实现应用程序链接.我希望我的应用程序能够处理*.example.com的链接,subdomains即example.com的所有链接(test.example.com,something.example.com等);
如何仅将应用程序链接实现到我网站上的特定路径.例如,我想拦截test.example.com/something,但不是test.example.com/other.第一个应该来到我的应用程序,另一个应该到我的浏览器;
相应的iOS指南显示iOS处理这两种情况(虽然通配符部分从文档中不清楚,我不得不向Apple支持部门澄清,您需要将关联文件放在根域,而不是子域).
Android App Links可以处理通配符域,只处理路径的子集吗?
更新:这个问题显然已经过时(见日期).我建议只使用像NSURLSession这样的现代iOS7功能.我猜这个问题保留了历史的准确性.
什么是(桌面Cocoa和)iPhone的优秀HTTP库?应该只有一个很好的接口,如HTTP标头,获取/发布值(请求字符串创建,URL编码/解码),同步和异步请求......最好是纯粹的Obj-C实现.NSURL*有点缺乏.
我有点像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,或使用任何其他方法?我不想自己动手,除非这是最有效的方式.
我使用的是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) 考虑使用应用程序委托生命周期实现的 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) 文档说如果我想支持肖像和风景,我基本上有两种方法:
我想提供布局大不相同的信息,但逻辑是相同的.理想情况下,我会为同一个viewcontroller加载另一个XIB,但它似乎不是一个选项.
听起来像#2是我需要做的,但我的问题是听起来它会使用标准的modalviewcontroller动画,它们与设备旋转动画完全不同.(当然,作为我的懒惰人,我没有测试这个假设.)
那么,如何使用相同的viewcontroller但不同的XIB为landscape添加替代布局?我应该使用上面的方法#2并且旋转动画是自然的吗?或者还有其他方式吗?
我正在寻找有关如何最好地考虑设计高级应用程序协议以在最终用户设备和服务器之间同步元数据的指导.
我的目标:用户可以在任何设备或网络上与应用程序数据进行交互.此协议的目的是通过服务器将在一个端点上进行的更改传达给其他端点,并确保所有设备都保持应用程序数据的一致性.如果用户在一台设备或Web上进行更改,协议会将数据推送到中央存储库,其他设备可以从中央存储库中提取数据.
其他一些设计思路:
作为一个具体的例子,你可以想到Dropbox(它不是我正在研究的,但它有助于理解模型):在一系列设备上,用户可以管理文件和文件夹 - 移动它们,创建新的,删除旧的等.在我的上下文中,"元数据"将是文件和文件夹结构,但不是实际的文件内容.元数据字段将类似于文件/文件夹名称和修改时间(所有设备应该看到修改的同一时间).
另一个例子是IMAP.我没有阅读协议,但我的目标(减去实际的消息体)是相同的.
感觉有两个宏大的方法如何做到这一点:
编辑:一些答案正确地说,有关该应用程序的信息不足以提供足够好的建议.该应用程序的确切性质可能会分散注意力,但一个非常基本的RSS阅读应用程序是一个足够好的近似.所以我们假设应用规范如下:
基于这种设计,我可以在一台设备上设置我的应用程序:添加一堆供稿,重命名并重新排序它们,并读取它们上的一些项目,然后标记为未读取.当我切换设备时,其他设备可以同步配置并向我显示具有相同名称,顺序和相同项目读取/未读状态的相同馈送列表.
(结束编辑)
我想在答案中:
设置:我有一个UICollectionView或UITableView那个由简单的数组数据源支持.我在控制器中保留了该数据源的副本.
现在,我从系统收到一条通知,告知有新数据可用.我得到一个新的数组,其中可能已添加,删除和更改位置的项目.
所以现在我有两个数据对象:
为了使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调用集,以及何时"换出"旧的数据源为新的?
ios ×4
cocoa ×2
core-data ×2
iphone ×2
android ×1
appkit ×1
applinks ×1
architecture ×1
cocoa-touch ×1
distributed ×1
http ×1
layout ×1
macos ×1
nsarray ×1
nspredicate ×1
nsset ×1
nstableview ×1
nstoolbar ×1
objective-c ×1
protocols ×1
rotation ×1
sorting ×1
swiftui ×1
uitableview ×1