小编gan*_*ogo的帖子

使用performBackgroundTask更新NSFetchedResultsController

我有一个NSFetchedResultsController,我试图在背景上下文更新我的数据.例如,这里我试图删除一个对象:

persistentContainer.performBackgroundTask { context in
  let object = context.object(with: restaurant.objectID)
  context.delete(object)
  try? context.save()
}
Run Code Online (Sandbox Code Playgroud)

有两件事我不明白:

  1. 我本来希望这可以修改,但不能保存父上下文.但是,父上下文肯定会被保存(通过手动打开SQLite文件进行验证).
  2. 我希望NSFetchedResultsController在后台内容保存回其父级时更新,但这不会发生.我是否需要在主线程上手动触发某些内容?

显然有一些我没有得到的东西.任何人都能解释一下吗?

我知道我已经正确地实现了获取的结果控制器委托方法,因为如果我改变我的代码直接更新viewContext,一切都按预期工作.

core-data ios swift

16
推荐指数
3
解决办法
3230
查看次数

如何触发所有自动布局约束的更新?

我以编程方式修改了一个自动布局约束.它对某个视图生效,但与该视图的其他约束绑定的其他视图不会更改其位置.是否有" updateAllConstraints "方法?

ios autolayout

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

如何从catch子句中的NSError获取userInfo

如果我有投掷方法,如下:

func doSomethingWithString(string:String) throws {
  guard string.characters.count > 0 else {
    throw NSError(domain: "CustomErrorDomain", code: 42, userInfo: ["foo" : "bar"])
  }
  // Do something with string...
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试调用它并阅读userInfo:

do {
  try doSomethingWithString("")
} catch let error as NSError {
  print(error.domain)
  print(error.code)
  print(error.userInfo)
}
Run Code Online (Sandbox Code Playgroud)

...它以空字典的形式返回,(但域名和代码已正确填充):

CustomErrorDomain
42
[:]
Run Code Online (Sandbox Code Playgroud)

但如果我加上这个额外的步骤:

do {
  try doSomethingWithString("")
} catch let e {
  let error = e as NSError
  print(error.domain)
  print(error.code)
  print(error.userInfo)
}
Run Code Online (Sandbox Code Playgroud)

...有用:

CustomErrorDomain
42
[foo: bar]
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?

仅供参考 - 我正在使用Xcode 7 beta …

error-handling swift swift2

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

在什么情况下 CLAuthorizationStatus 是“受限的”?

苹果的文档指出一个CLAuthorizationStatus.restricted意思是说:

用户无法更改此应用程序的状态,可能是由于存在家长控制等主动限制。

谁能告诉我还有什么其他原因(除了家长控制)会导致这种情况?

我想给用户一条有用的信息,告诉他们如何取消限制,但不确定如何措辞。

core-location ios swift

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