я пытаюсь получить идентификатор пользователя и мой сценарий держит неудачу:Swift Dynamic Cast Failure
func getUserID(users:NSString){
var username:NSString = "abcd"
println(username)
if (username.isEqualToString("")) {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Failed to find user"
alertView.message = "Please try logging in and out."
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else {
var post:NSString = "username=\(username)"
NSLog("PostData: %@",post);
var url:NSURL = NSURL(string: "http://turbo-tires-21-188007.euw1.nitrousbox.com/jsonGetUserID.php")!
var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String(postData.length)
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
if (urlData != nil) {
let res = response as NSHTTPURLResponse!;
NSLog("Response code: %ld", res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300)
{
var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
NSLog("Response ==> %@", responseData);
var error: NSError?
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary
let idusers:NSInteger = jsonData.valueForKey("idusers") as NSInteger
}
}
}
}
и ошибка вывода заключается в следующем:
libswiftCore.dylib`swift_dynamicCastObjCClassUnconditional:
0x111199620: pushq %rbp
0x111199621: movq %rsp, %rbp
0x111199624: pushq %rbx
0x111199625: pushq %rax
0x111199626: movq %rsi, %rcx
0x111199629: movq %rdi, %rbx
0x11119962c: xorl %eax, %eax
0x11119962e: testq %rbx, %rbx
0x111199631: je 0x11119964c ;
swift_dynamicCastObjCClassUnconditional + 44
0x111199633: movq 0x82756(%rip), %rsi ; "isKindOfClass:"
0x11119963a: movq %rbx, %rdi
0x11119963d: movq %rcx, %rdx
0x111199640: callq 0x11119c1ca ; symbol stub for:
objc_msgSend
0x111199645: testb %al, %al
0x111199647: movq %rbx, %rax
0x11119964a: je 0x111199653 ;
swift_dynamicCastObjCClassUnconditional + 51
0x11119964c: addq $0x8, %rsp
0x111199650: popq %rbx
0x111199651: popq %rbp
0x111199652: retq
0x111199653: leaq 0xcdc8(%rip), %rax ; "Swift dynamic cast failed"
0x11119965a: movq %rax, 0x8ae57(%rip) ; gCRAnnotations + 8
0x111199661: int3
0x111199662: nopw %cs:(%rax,%rax)
Я пытался много разные способы думать, что это был формат строки, но до сих пор ничего не работало.
getUserID("abcd");
Так я называю метод. Эта ошибка приводит к сбою приложения и устранению ошибки выше, я получаю (lldb) в утешительном. Любая помощь будет большой.
UPDATE: Я сузил ошибку:
let idusers:NSInteger = jsonData.valueForKey("idusers") as NSInteger
РЕШИТЬ: проблемы была число в формате JSON является строкой, поэтому я использовал NSString, и она работает.
пусть idusers: NSNumber = jsonData.valueForKey («idusers»), поскольку NSNumber, похоже, является той же ошибкой. – Shinerrs
NSInteger действительно работает, проблема заключалась в том, что число в json - это строка, поэтому я использовал NSString, и она работает. – Shinerrs
Ну, я предположил, что на самом деле это число, но да, если это строка, вы должны использовать 'NSString';). – Rengers