我已经更新了现有的 CoreData 应用程序以使用 CloudKit,以便它可以在多个设备之间保持数据同步(对于同一 iCloud 帐户)。
有用!数据同步就好了。
但主 UIViewController 的视图不反映新数据。要查看更改,我必须切换到不同的视图,然后切换回refreshData()
在其viewWillAppear()
函数中有调用的主视图。然后,它从数据存储中重新读取并显示所有数据(包括在其他设备上更新的数据)。
UIViewController 应该NSPersistentStoreRemoteChange
按照viewDidLoad()
以下方式观察通知:
override func viewDidLoad() {
super.viewDidLoad()
// NotificationCenter.default.addObserver(self, selector: #selector(handleRemoteChange), name: .NSPersistentStoreRemoteChange, object: AppDelegate.appDelegate().persistentContainer.persistentStoreCoordinator)
NotificationCenter.default.addObserver(self, selector: #selector(handleRemoteChange), name: .NSPersistentStoreRemoteChange, object: nil)
}
Run Code Online (Sandbox Code Playgroud)
但处理函数永远不会被调用:
@objc func handleRemoteChange(notification: Notification) {
print("Handling remote change to data in Collection Controller")
refreshData()
}
Run Code Online (Sandbox Code Playgroud)
该打印语句永远不会打印任何内容,并且在那里设置的断点也永远不会触发。
NSPersistentCloutKitContainer
我已将托管对象上下文配置为在创建后立即根据需要合并来自父级的更改:
container.viewContext.automaticallyMergesChangesFromParent = true
Run Code Online (Sandbox Code Playgroud)
该应用程序具有我在网络(和 Stack Overflow)中搜索线索后了解到的所有相关 iCloud 功能和权利,包括:
容器的 persistenceStoreDescription 的NSPersistentStoreRemoteChangeNotificationPostOptionKey
选项设置为 true:
container.loadPersistentStores(completionHandler: { (storeDescription, …
Run Code Online (Sandbox Code Playgroud) UIActivityViewController 的标题如何设置?我有一个 UIActivityViewController,它使用自定义 UIActivityItemProvider 以及自定义 UIActivity。
显示在 UIActivityItemController 顶部的标题最初很简单,“ / ”,没有副标题,然后大约一秒钟后,它变为“ System@snap-2237692 ”,副标题为“ File ”,如下所示根据下面的屏幕截图。
这些标题来自哪里以及如何控制此处显示的内容?
我尝试显式设置视图控制器的“标题”属性,但没有什么区别。
我在 UITableView 的标题中使用 UISearchController 的 UISearchBar。我的搜索工作正常,因为当我在搜索栏的字段中输入一些文本时,所有相关方法都会被调用,并且表格视图会按预期显示正确的搜索结果。
当我想利用其中一个结果对其进行处理时,问题就出现了。一旦我点击表视图单元格之一,搜索栏中的字段就会变为空。由于搜索文本现在是空的,搜索结果被更新,表格视图重新加载零结果。所以点击表格单元格什么也不做,因为表格单元格不再存在。
我可以通过更新我的updateSearchResultsForSearchController:
方法在搜索字符串为空时不更新搜索结果来解决大部分问题。这工作正常。但无论如何,我仍然希望搜索文本保留在搜索字段中,这是我问题的关键......
为什么我的搜索文本从搜索字段中消失了,当我点击其他地方时,如何防止搜索字段变空?
这是我设置搜索栏和搜索控制器的方法:
- (void)viewDidLoad {
[super viewDidLoad];
searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
searcher.searchResultsUpdater = self;
searcher.delegate = self;
searcher.definesPresentationContext = YES;
resultsTable.tableHeaderView = searcher.searchBar;
Run Code Online (Sandbox Code Playgroud)
编辑:我注意到当搜索栏有焦点时表格视图单元格变暗。所以我认为搜索控制器正在捕获所有触摸,并且可能将它们作为“取消”操作来处理。如果是这样,我该如何阻止它以这种方式取消?