私は、ボタンのクリックを経由してシミュレータでのビューを変更するが、エラーを取得維持しようとしています:スウィフト3 - スレッド1:信号SIGABRT
Thread 1: signal SIGABRT
私はとの切断があるとき、これは通常起こることを承知していますアウトレットや行動を確認したが、すべてがリンクされているようだ。
AppDelegate.swift
import UIKit
import Parse
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// Parse configuration in Heroku
let configuration = ParseClientConfiguration {
// accessing Heroku App via ID and Keys
$0.applicationId = "truegramIDDB91"
$0.clientKey = "truegramKeyDB91"
$0.server = "http://truegram.herokuapp.com/parse"
}
// call login function
login()
Parse.initialize(with: configuration)
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
func login() {
// remember user's login
let username : String? = UserDefaults.standard.string(forKey: "username")
// if logged in
if username != nil {
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let myTabBar = storyboard.instantiateViewController(withIdentifier: "tabBar") as! UITabBarController
window?.rootViewController = myTabBar
}
}
}
SignInVC.swift
import UIKit
import Parse
class signInVC: UIViewController {
// textfields
@IBOutlet weak var usernameTxt: UITextField!
@IBOutlet weak var passwordTxt: UITextField!
@IBOutlet weak var label: UILabel!
// sign in button view
@IBOutlet weak var signinBtnBlock: UIView!
// buttons
@IBOutlet weak var signInBtn: UIButton!
@IBOutlet weak var signUpBtn: UIButton!
@IBOutlet weak var forgotPasswordBtn: UIButton!
// default function
override func viewDidLoad() {
super.viewDidLoad()
// font of label (Clubbr)
label.font = UIFont(name: "gillsans-light", size: 22)
}
// clicked sign in button
@IBAction func signInBtnClick(sender: AnyObject) {
print("sign in pressed")
// hide keyboard
self.view.endEditing(true)
// if text fields are empty
if usernameTxt.text!.isEmpty || passwordTxt.text!.isEmpty {
// show alert message
let alert = UIAlertController(title: "Please", message: "fill in fields", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// login functions
PFUser.logInWithUsername(inBackground: usernameTxt.text!, password: passwordTxt.text!) { (user: PFUser?, error: Error?) -> Void in
if error == nil {
// remember user or save in app memory (did the user log in or not)
UserDefaults.standard.set(user!.username, forKey: "username")
UserDefaults.standard.synchronize()
// Call login function from AppDelegate.swift class
let appDelegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.login()
} else {
// show alert message
let alert = UIAlertController(title: "Error", message: error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
SignUpVc.swift
import UIKit
import Parse
class signUpVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
// profile image
@IBOutlet weak var avaImg: UIImageView!
// textfields
@IBOutlet weak var firstnameTxt: UITextField!
@IBOutlet weak var lastnameTxt: UITextField!
@IBOutlet weak var emailTxt: UITextField!
@IBOutlet weak var passwordTxt: UITextField!
@IBOutlet weak var confirmTxt: UITextField!
// buttons
@IBOutlet weak var loginBtn: UIButton!
@IBOutlet weak var signupBtn: UIButton!
@IBOutlet weak var businessSignupBtn: UIButton!
// scroll view
@IBOutlet weak var scrollView: UIScrollView!
// resets scroll view to default size
var scrollViewHeight : CGFloat = 0
// keyboard frame size
var keyboard = CGRect()
// default func
override func viewDidLoad() {
super.viewDidLoad()
// check notifications if keyboard is shown or not
NotificationCenter.default.addObserver(self, selector: Selector(("showKeyboard:")), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: Selector(("hideKeyboard:")), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
// declare hide keyboard tap
let hideTap = UITapGestureRecognizer(target: self, action: Selector(("hideKeyboardTap:")))
hideTap.numberOfTapsRequired = 1
self.view.isUserInteractionEnabled = true
self.view.addGestureRecognizer(hideTap)
// profile image circle shape and custom border colour
avaImg.layer.borderWidth = 2
avaImg.layer.borderColor = UIColor.init(red: 90/255, green: 187/255, blue: 181/255, alpha: 1).cgColor
avaImg.layer.cornerRadius = avaImg.frame.height/2
avaImg.clipsToBounds = true
// declare select image tap
let avaTap = UITapGestureRecognizer(target: self, action: Selector(("loadImg:")))
avaTap.numberOfTapsRequired = 1
avaImg.isUserInteractionEnabled = true
avaImg.addGestureRecognizer(avaTap)
}
// call picker to select image
func loadImg(recognizer: UITapGestureRecognizer) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
// connect selected image to our image view
private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
avaImg.image = info[UIImagePickerControllerEditedImage] as? UIImage
self.dismiss(animated: true, completion: nil)
}
// hide keyboard if tapped
func hideKeyboardTap(recognizer: UITapGestureRecognizer) {
self.view.endEditing(true)
}
// show keyboard
func showKeyboard(notification: NSNotification) {
// define keyboard sizes
keyboard = ((notification.userInfo?[UIKeyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue)!
//move up UI
UIView.animate(withDuration: 0.4) {() -> Void in
self.scrollView.frame.size.height = self.scrollViewHeight - self.keyboard.height
}
}
// hide keyboard
func hideKeyboard(notification: NSNotification) {
//move down UI
UIView.animate(withDuration: 0.4) {() -> Void in
self.scrollView.frame.size.height = self.view.frame.height
}
}
// clicked sign up
@IBAction func signupBtnClick(sender: AnyObject) {
print("sign up pressed")
// dismiss keyboard
self.view.endEditing(true)
// if fields are empty
if (emailTxt.text!.isEmpty || passwordTxt.text!.isEmpty || confirmTxt.text!.isEmpty || firstnameTxt.text!.isEmpty || lastnameTxt.text!.isEmpty) {
// alert pop up message
let alert = UIAlertController(title: "Please", message: "fill all fields", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// if incorrect password
if passwordTxt.text != confirmTxt.text {
// alert pop up message
let alert = UIAlertController(title: "Attention", message: "incorrect password", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// send data to related columns in server
let user = PFUser()
user.username = emailTxt.text?.lowercased()
user.email = emailTxt.text?.lowercased()
user.password = passwordTxt.text
user["firstname"] = firstnameTxt.text?.lowercased()
user["lastname"] = lastnameTxt.text?.lowercased()
// convert our image for sending to server
let avaData = UIImageJPEGRepresentation(avaImg.image!, 0.5)
let avaFile = PFFile(name: "ava.jpg", data: avaData!)
user["ava"] = avaFile
// save data in server
user.signUpInBackground { (success: Bool, error: Error?) -> Void in
if success {
print("registered")
// remember logged user
UserDefaults.standard.set(user.username, forKey: "username")
UserDefaults.standard.synchronize()
// calls login func from AppDelegate.swift class
let appDelegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.login()
} else {
// show alert message
let alert = UIAlertController(title: "Error", message: error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
}
}
// clicked return to log in
@IBAction func loginBtnClick(sender: AnyObject) {
self.dismiss(animated: true, completion: nil)
// dismiss keyboard
self.view.endEditing(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
ResetPasswordVC.swift
import UIKit
import Parse
class resetPasswordVC: UIViewController {
// text field
@IBOutlet weak var emailTxt: UITextField!
// buttons
@IBOutlet weak var cancelBtn: UIButton!
@IBOutlet weak var resetBtn: UIButton!
// clicked cancel button
@IBAction func cancelBtnClick(sender: AnyObject) {
self.dismiss(animated: true, completion: nil)
// dismiss keyboard
self.view.endEditing(true)
}
// clicked reset button
@IBAction func resetBtnClick(sender: AnyObject) {
// hide keyboard
self.view.endEditing(true)
// if email text field is empty
if emailTxt.text!.isEmpty {
// show alert message
let alert = UIAlertController(title: "Email field", message: "is empty", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// request for resetting password
PFUser.requestPasswordResetForEmail(inBackground: emailTxt.text!) { (success: Bool, error: Error?) -> Void in
if success {
// show alert message
let alert = UIAlertController(title: "Reset Password Email", message: "has been sent to the email address associated with your account", preferredStyle: UIAlertControllerStyle.alert)
// of ok is pressed call self.dismiss.. function
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { (UIAlertAction) -> Void in
self.dismiss(animated: true, completion: nil)
})
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
} else {
print(error?.localizedDescription)
}
}
}
// default func
override func viewDidLoad() {
super.viewDidLoad()
// tap to hide keyboard
let hideTap = UITapGestureRecognizer(target: self, action: Selector(("hideKeyboard:")))
hideTap.numberOfTapsRequired = 1
self.view.isUserInteractionEnabled = true
self.view.addGestureRecognizer(hideTap)
}
// hide keyboard function
func hideKeyboard(recognizer: UITapGestureRecognizer) {
self.view.endEditing(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
私は、問題はかなり明白なものですが、私は唯一の3ヶ月間スウィフトと協力してきた、それは私の最初のプログラミング言語であると確信しています。私は本当に助けに感謝します。
お時間をいただきありがとうございます。
同じエラー
やあみんな、私はこの自分自身をソートするために全力をしようとしてきたが、それでグリップを得ることができません。 @Vadianからの最初の応答がIBActionsの問題を解決した後、私はまだ同じSIGABRTエラーを受けています。
エラー情報
2016-10-06 17:18:33.709206 Truegram[13130:1026640] [MobileAssetError:29] Unable to copy asset information from https://mesu.apple.com/assets/ for asset type com.apple.MobileAsset.TextInput.SpellChecker
sign up pressed
2016-10-06 17:18:53.120 Truegram[13130:1026284] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The class PFUser must be registered with registerSubclass before using Parse.'
私は上記のエラーに最も関連であり、これは
「を申し込む」を押した後、私は別のもを追加したエラーが発生したとして立証しているように見えると思います問題を引き起こしている可能性のあるビジネスに固有のサインアップページ。これが今私に解決しようとする日のカップルを取ったので、私は誰が助けることができれば非常に感謝だろう
import UIKit
import Parse
class BusinessSignUpVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
// profile image
@IBOutlet weak var BusinessAvaImg: UIImageView!
// textfields
@IBOutlet weak var confirmTxt: UITextField!
@IBOutlet weak var passwordTxt: UITextField!
@IBOutlet weak var AddressTxt: UITextView!
@IBOutlet weak var contactNumTxt: UITextField!
@IBOutlet weak var emailTxt: UITextField!
@IBOutlet weak var businessNameTxt: UITextField!
// buttons
@IBOutlet weak var loginBtn: UIButton!
@IBOutlet weak var signupBtn: UIButton!
@IBAction func loginBtnClick(_ sender: AnyObject) {
}
// keyboard frame size
var keyboard = CGRect()
override func viewDidLoad() {
super.viewDidLoad()
// check notifications if keyboard is shown or not
NotificationCenter.default.addObserver(self, selector: #selector(BusinessSignUpVC.showKeyboard(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: Selector(("hideKeyboard:")), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
// declare hide keyboard tap
let hideTap = UITapGestureRecognizer(target: self, action: #selector(BusinessSignUpVC.hideKeyboardTap(_:)))
hideTap.numberOfTapsRequired = 1
self.view.isUserInteractionEnabled = true
self.view.addGestureRecognizer(hideTap)
// profile image circle shape and custom border colour
BusinessAvaImg.layer.borderWidth = 2
BusinessAvaImg.layer.borderColor = UIColor.init(red: 90/255, green: 187/255, blue: 181/255, alpha: 1).cgColor
BusinessAvaImg.layer.cornerRadius = BusinessAvaImg.frame.height/2
BusinessAvaImg.clipsToBounds = true
// declare select image tap
let avaTap = UITapGestureRecognizer(target: self, action: #selector(BusinessSignUpVC.loadImg(_:)))
avaTap.numberOfTapsRequired = 1
BusinessAvaImg.isUserInteractionEnabled = true
BusinessAvaImg.addGestureRecognizer(avaTap)
}
// call picker to select image
func loadImg(_ recognizer: UITapGestureRecognizer) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
// connect selected image to our image view
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
BusinessAvaImg.image = info[UIImagePickerControllerEditedImage] as? UIImage
self.dismiss(animated: true, completion: nil)
}
// hide keyboard if tapped
func hideKeyboardTap(_ recognizer: UITapGestureRecognizer) {
self.view.endEditing(true)
}
// show keyboard
func showKeyboard(_ notification: NSNotification) {
// define keyboard sizes
keyboard = ((notification.userInfo?[UIKeyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue)!
// Do any additional setup after loading the view.
}
// clicked sign up
@IBAction func signupBtnClick(_ sender: AnyObject) {
print("sign up pressed")
// dismiss keyboard
self.view.endEditing(true)
// if fields are empty
if (emailTxt.text!.isEmpty || passwordTxt.text!.isEmpty || confirmTxt.text!.isEmpty || businessNameTxt.text!.isEmpty || AddressTxt.text!.isEmpty || contactNumTxt.text!.isEmpty) {
// alert pop up message
let alert = UIAlertController(title: "Please", message: "fill all fields", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// if incorrect password
if passwordTxt.text != confirmTxt.text {
// alert pop up message
let alert = UIAlertController(title: "Attention", message: "incorrect password", preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
// send data to related columns in server
let businessUser = PFUser()
businessUser.username = businessNameTxt.text?.lowercased()
businessUser.email = emailTxt.text?.lowercased()
businessUser.password = passwordTxt.text
businessUser["BusinessUser"] = businessNameTxt.text?.lowercased()
businessUser["Address"] = AddressTxt.text?.lowercased()
businessUser["ContactNumber"] = contactNumTxt.text?.lowercased()
// convert our image for sending to server
let avaData = UIImageJPEGRepresentation(BusinessAvaImg.image!, 0.5)
let avaFile = PFFile(name: "ava.jpg", data: avaData!)
businessUser["ava"] = avaFile
// save data in server
businessUser.signUpInBackground { (success: Bool, error: Error?) -> Void in
if success {
print("registered")
// remember logged user
UserDefaults.standard.set(businessUser.username, forKey: "username")
UserDefaults.standard.synchronize()
// calls login func from AppDelegate.swift class
let appDelegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.login()
} else {
// show alert message
let alert = UIAlertController(title: "Error", message: error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
alert.addAction(ok)
self.present(alert, animated: true, completion: nil)
}
}
}
// clicked return to log in
@IBAction func businessLoginBtnClick(_ sender: AnyObject) {
self.dismiss(animated: true, completion: nil)
// dismiss keyboard
self.view.endEditing(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
BusinessSignUp.swift。
私たちを少し助けて、エラーがどの行にあるのかを示すことができますか?コンパイラはどの行を指していますか? – KSigWyatt
ボタンをクリックするとエラーになりますか? –
ヴァディアンの答えを見てください。彼がそれを得たときに私はそれを投稿しようとしていた – KSigWyatt