Richard Downs Richard Downs - 1 month ago 5
iOS Question

Error in Swift JSON when receiving 'json_encode' from PHP script. Works fine without it

I have a Swift function for a button that when pressed writes some details into a database via PHP:

@IBAction func createCommunityButtonTapped(_ sender: AnyObject) {

let communityName = communityNameTextField.text;
if (communityName!.isEmpty){
displayMyAlertMessage(userMessage: "You must name your Community");

return;
}else{

func generateRandomStringWithLength(length: Int) -> String {

var randomString = ""
let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

for _ in 1...length {
let randomIndex = Int(arc4random_uniform(UInt32(letters.characters.count)))
let a = letters.index(letters.startIndex, offsetBy: randomIndex)
randomString += String(letters[a])
}

return randomString
}

let communityCode = generateRandomStringWithLength(length: 6)
passwordTextField.text = communityCode

let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/createCommunity.php?");

var request = URLRequest(url:myUrl!);
request.httpMethod = "POST";

let postString = "communityname=\(communityName!)&code=\(communityCode)&email=\(myEmail!)";

request.httpBody = postString.data(using: String.Encoding.utf8);

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if (try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]) != nil {
}
}

task.resume()

}

}


The function works great apart from whenever I add this
echo json
line into the PHP script:

if($newresult)
{
$returnValue["status"] = "Success";
$returnValue["message"] = "Community is registered";
echo json_encode($returnValue);
return;
}


Then I get an error
Thread 8: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subside = 0x0)
on this line:

if (try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]) != nil {
}


And in the debug area the following details

data Data? some
response URLResponse? 0x0000618000223500
error Error? nil none


I think I'm missing a line, or need to set a variable to the JSONSerialization instead of 'try!' but I'm very unsure what.

Answer

You are not returning null. Try this

if($newresult)
{
 $returnValue["status"] = "Success";
 $returnValue["message"] = "Community is registered";
 return json_encode($returnValue);
}
Comments