0

我正在制作一个使用 Backendless 来保存数据的应用程序。正如他们在这里所说的,我已经把所有东西都连接起来了。

但是,调用该persistenceService方法时应用程序崩溃:

backendless.persistenceService.of(UserSchema.ofClass()).save(user)

这是该文件的代码:

import UIKit

class SignUpViewController: UIViewController {

    @IBOutlet weak var userName: UITextField!
    @IBOutlet weak var email: UITextField!
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var firstName: UITextField!
    @IBOutlet weak var lastName: UITextField!
    @IBOutlet weak var dateOfBirth: UITextField!
    @IBOutlet weak var zip: UITextField!

    let backendless = Backendless.sharedInstance()
    // Create a new instance of UserSchema for the use of createing a new user.
    let user = UserSchema()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func signUp() {

        // Check to make sure all fields have proper values and are not nill.
        if userName.text != nil && email.text != nil && password.text != nil && firstName.text != nil
            && lastName.text != nil && dateOfBirth != nil && zip.text != nil && Int(zip.text!) != nil {

                // Asign text from fields to the variables for the new user.
                user.userName = userName.text
                user.email = email.text
                user.password = password.text
                user.firstName = firstName.text
                user.lastName = lastName.text
                user.dateOfBirth = dateOfBirth.text
                user.zip = zip.text

                backendless.persistenceService.of(UserSchema.ofClass()).save(user)

                shouldPerformSegueWithIdentifier("succesfulSignUp", sender: nil)

        } else {
            // Alert the user if any of the values are nil so they can fix the issue.
            let emptyTextFieldAlert = UIAlertController(title: "Empty Field", message: "Please make sure all fields have proper values", preferredStyle: .Alert)
            emptyTextFieldAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action -> Void in
                // Do nothing
            }))
            self.presentViewController(emptyTextFieldAlert, animated: true, completion: nil)

        }
    }
}

这是UserSchema课程:

import Foundation

// Class for data that gets sent to the Backendless database

class UserSchema: NSObject {

    var zip: String?
    var userName: String?
    var password: String?
    var firstName: String?
    var lastName: String?
    var email: String?
    var dateOfBirth: String?
}

是什么导致崩溃?

这是架构的屏幕截图:

在此处输入图像描述

这是一个 repo,因此您可以克隆和测试代码。我做了一些与问题中的代码不同的更改:

https://github.com/calebkleveter/chatter

重现崩溃;运行应用程序,选择登录页面上的注册按钮,用正确的信息填写所有字段,然后点击“注册!” 按钮。应用程序将崩溃。

更新:

我设法通过在这条线上放置一个刹车点来获得日志输出

backendless.persistenceService.of(UserSchema.ofClass()).save(user)

然后进入它,然后我逐步浏览应用程序,直到它崩溃,我得到了这个:

2016-04-11 12:04:09.025 Chatter[21686:11538370] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000106c64e65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001090f5deb objc_exception_throw + 48
    2   CoreFoundation                      0x0000000106b23652 -[__NSPlaceholderArray initWithObjects:count:] + 290
    3   CoreFoundation                      0x0000000106b807e4 +[NSArray arrayWithObjects:count:] + 52
    4   Chatter                             0x00000001053ffc53 -[PersistenceService save:] + 409
    5   Chatter                             0x00000001052e2eb5 _TFC7Chatter20SignUpViewController6signUpfS0_FT_T_ + 8709
    6   Chatter                             0x00000001052e3452 _TToFC7Chatter20SignUpViewController6signUpfS0_FT_T_ + 34
    7   UIKit                               0x0000000107bd3194 -[UIApplication sendAction:to:from:forEvent:] + 92
    8   UIKit                               0x0000000107d426fc -[UIControl sendAction:to:forEvent:] + 67
    9   UIKit                               0x0000000107d429c8 -[UIControl _sendActionsForEvents:withEvent:] + 311
    10  UIKit                               0x0000000107d41af8 -[UIControl touchesEnded:withEvent:] + 601
    11  UIKit                               0x0000000107c4249b -[UIWindow _sendTouchesForEvent:] + 835
    12  UIKit                               0x0000000107c431d0 -[UIWindow sendEvent:] + 865
    13  UIKit                               0x0000000107bf1b66 -[UIApplication sendEvent:] + 263
    14  UIKit                               0x0000000107bcbd97 _UIApplicationHandleEventQueue + 6844
    15  CoreFoundation                      0x0000000106b90a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    16  CoreFoundation                      0x0000000106b8695c __CFRunLoopDoSources0 + 556
    17  CoreFoundation                      0x0000000106b85e13 __CFRunLoopRun + 867
    18  CoreFoundation                      0x0000000106b85828 CFRunLoopRunSpecific + 488
    19  GraphicsServices                    0x000000010b743ad2 GSEventRunModal + 161
    20  UIKit                               0x0000000107bd1610 UIApplicationMain + 171
    21  Chatter                             0x00000001052ea13d main + 109
    22  libdyld.dylib                       0x0000000109c4692d start + 1
    23  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
4

1 回答 1

0

结果我不小心给了APP_IDSECRET_KEY变量相同的值。修复后一切正常!

于 2016-06-02T12:58:33.820 回答