NSErrorDomain有没有办法获取苹果为:提供的代码常量列表CloudPhotoLibraryErrorDomain。具体来说,我正在寻找 code 的常量81。
欢迎任何意见/建议!
我正在做一个相当普通的addPersistentStore NSPersistentStoreCoordinator,它生成了一个错误代码.
所以我去了NSLog它,当我这样做时出现访问错误:
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
Run Code Online (Sandbox Code Playgroud)
这似乎是常见的习语.
当我重新格式化错误语句时,如下所示:
NSLog(@"Unresolved error %@", [error userInfo]);
Run Code Online (Sandbox Code Playgroud)
......问题消失了.
甚至NSZombie也没有正确捕获错误的访问错误!
有任何想法吗?
我养成了以这种方式编写错误处理的习惯:
NSError* error = nil;
NSDictionary *attribs = [[NSFileManager defaultManager] removeItemAtPath:fullPath error:&error];
if (error != nil) {
DLogErr(@"Unable to remove file: error %@, %@", error, [error userInfo]);
return;
}
Run Code Online (Sandbox Code Playgroud)
但看文档似乎我错了:
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
如果发生错误,则返回时包含描述问题的NSError对象.如果您不想要错误信息,请传递NULL.
从技术上讲,nil和NULL之间没有区别,所以这是否意味着我实际上关闭它并且永远不会收到错误消息(即使上面示例中的删除失败了)?有没有更好的方法来编码?
谢谢.
我正在尝试NSError使用更多信息更新对象.例如,api调用可能会失败,我想更新从api类返回的错误对象与视图控制器信息(导致错误的方法名称,客户端消息,任何其他信息).UserInfo字典没有setter方法,并且尝试为字典设置值会引发异常(我认为不符合键值代码).我想过NSError用更新的用户信息创建一个新对象,但我不确定我是否会丢失信息.
更新NSError对象的用户信息字典的最佳方法是什么?
我正在从iOS8切换到iOS9,并通过HTTPS进行AFNetworking Web服务调用,这些调用在不再有效之前有效.我收到了error -1200,error -9824问题与使用自签名证书有关.
错误域= kCFErrorDomainCFNetwork代码= -1200"发生SSL错误,无法建立与服务器的安全连接." UserInfo = {NSErrorFailingURLStringKey = [server url],NSLocalizedRecoverySuggestion =您是否还要连接到服务器?,_ kCFNetworkCFStreamSSLErrorOriginalValue = -9824
我看到了这个相关的问题:NSURLSession的IOS9 SSL错误,但有以下答案,但答案很神秘,并没有真正告诉我如何解决这个问题.
ATS仅信任由知名CA签署的证书,所有其他证书都被拒绝.因此,具有自签名证书的唯一解决方案是使用NSExceptionDomains设置异常.
在iOS9上更新AFNetworking调用以使用HTTPS的正确方法是什么?
在过去,我使用了许多变通方法,包括一种回应方式NSURLAuthenticationChallenge,但我正在寻找更明确的东西.
我使用了很多异步网络请求的(顺便说一句任何网络请求的iOS需要通过异步),我发现的方式来更好地应对来自苹果的错误,dataTaskWithRequest它并不支持throws.
我有这样的代码:
func sendRequest(someData: MyCustomClass?, completion: (response: NSData?) -> ()) {
let request = NSURLRequest(URL: NSURL(string: "http://google.com")!)
if someData == nil {
// throw my custom error
}
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// here I want to handle Apple's error
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
我需要解析我可能的自定义错误并处理可能的连接错误dataTaskWithRequest.引入了Swift 2 throws,但你不能抛弃Apple的关闭,因为它们没有抛出支持并且运行异步.
我只看到添加到我的完成块NSError返回的方法,但据我所知使用的NSError是旧式的Objective-C方式.ErrorType只能用于投掷(afaik).
使用Apple网络闭包时,处理错误的最佳和最现代的方法是什么?根据我的理解,任何异步网络功能都没有办法投入使用吗?
我现在对指针的指针很困惑,即使我已经读过为什么NSError需要双重间接?(指向指针的指针)和NSError*vs NSError**等等.
我做了一些思考,仍然有一些问题.
在这里我写了这个:
NSError *error = [NSError errorWithDomain:@"before" code:0 userInfo:nil];
NSLog(@"outside error address: %p", &error];
[self doSomethingWithObj:nil error:&error];
Run Code Online (Sandbox Code Playgroud)
为了测试上面的NSError方法,我写了这个:
- (id)doSomethingWithObj:(NSObject *)obj error:(NSError *__autoreleasing *)error
{
NSLog(@"inside error address: %p", error);
id object = obj;
if (object != nil)
{
return object;
}
else
{
NSError *tmp = [NSError errorWithDomain:@"after" code:0 userInfo:nil];
*error = tmp;
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
但我发现两个日志记录地址不同.这是为什么?
2016-08-19 19:00:16.582 Test[4548:339654] outside error address: 0x7fff5b3e6a58
2016-08-19 19:00:16.583 Test[4548:339654] inside error address: …Run Code Online (Sandbox Code Playgroud) 我在Playground上使用Swift 3定义了以下类:
class MyError: Error {
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个这样的类的实例,并检查它是否是一个 NSError
let firstError = MyError()
firstError is NSError // Output: false
Run Code Online (Sandbox Code Playgroud)
输出是预期的,我也得到一个警告,表明Cast from 'MyError' to unrelated type 'NSError' always fails.这对我来说很有意义,但是如果我稍微改变一下代码并将变量声明为一个Error,我会得到一个奇怪的结果:
var secondError: Error
secondError = MyError()
secondError is NSError // Output: true
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我会在最后一行中收到警告'is' test is always true.当模型被定义为round()的另一种方式时,我不明白为什么Error一直是一个.知道这里发生了什么吗?NSErrorNSError: Error
我的Swift应用程序有一个自定义错误系统,MyError它只是一个符合的简单类Error.现在,只要第三方库(PromiseKit)尝试将此错误转换为NSError然后访问其domain属性,应用程序就会崩溃.在我自己的代码中,这样做会按预期工作,那么为什么它会在库中崩溃以及处理它的正确方法是什么?
Crashed: com.apple.main-thread
0 libswiftCore.dylib 0x1011d86d8 _hidden#19226_ (__hidden#19178_:1788)
1 libswiftCore.dylib 0x1011cda3c _hidden#19206_ (__hidden#19447_:4045)
2 libswiftCore.dylib 0x1011cda3c _hidden#19206_ (__hidden#19447_:4045)
3 libswiftCore.dylib 0x1011cdc90 swift_getTypeName (__hidden#19406_:1731)
4 AppName 0x1001dafec specialized (_adHocPrint_unlocked<A, B where ...> (A, Mirror, inout B, isDebugPrint : Bool) -> ()).(printTypeName #1)<A, B where ...> (Any.Type) -> () (MyError.swift)
5 AppName 0x1001db4f0 specialized specialized _adHocPrint_unlocked<A, B where ...> (A, Mirror, inout B, isDebugPrint : Bool) -> () (MyError.swift)
6 AppName 0x1001dafb4 specialized _debugPrint_unlocked<A, …Run Code Online (Sandbox Code Playgroud) 我已经看到已经有一个关于 Swift和Swift 之间差异的问题,我知道这些差异。但是,我不理解下面代码片段的行为,因为它编译正确。Swift 的错误处理机制要求每个未出现在带有 throws 子句的函数中的 do-catch 块都包含一个通用处理程序(要么不包含任何其他内容,要么包含一个for Error)。然而,使用似乎具有相同的效果。这里有人知道原因吗?我在另一个问题中读到“任何符合 ErrorType 的类都可以转换为 NSError。这些功能在文档中进行了描述。”。然而,该答案指出的文档并没有向我澄清这一点,因为它重点关注我没有使用的 Objective-C。NSErrorErrorcatchcatchNSError
import Foundation
extension Int : Error {}
extension String : Error {}
func fErr() throws {
let a = Int(readLine()!)!
if a > 20 {
throw 42
} else {
throw "An error occurred"
}
}
func gErr() {
do {
try fErr()
} catch let e as NSError {
print(e)
}
}
Run Code Online (Sandbox Code Playgroud)