«Пытался сохранить объект с новым несохраненным дочерним элементом». быстрый разбор

Это мой код:

 userEmployer.signUpInBackgroundWithBlock { (success, error) -> Void in
        if error != nil {
            let errorString = error?.userInfo["error"] as! String
        } else {
            var queryRole = PFRole.query()
            queryRole?.whereKey("name", equalTo: "Employer")
            queryRole?.getFirstObjectInBackgroundWithBlock({ (roleObject, error) -> Void in
                if error == nil{
                    var roleToAddUser = roleObject as! PFRole
                    roleToAddUser.users.addObject(PFUser.currentUser()!)
                    roleToAddUser.saveInBackground()
                }// end of it
            })// end of query
        }//end of else
    }//end of signup

Это действительно странно, потому что у меня есть тот же шаблон кода для регистрации другой роли, и он работает правильно. Он продолжает бросать

'Tried to save an object with a new, unsaved child.'

Я не понимаю, почему он выдает ошибку.

First throw call stack:
(
    0   CoreFoundation                      0x0000000106cddf45 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000106755deb objc_exception_throw + 48
    2   CoreFoundation                      0x0000000106cdde7d +[NSException raise:format:] + 205
    3   post                            0x0000000104ec93e2 -[PFPointerObjectEncoder encodeParseObject:] + 108
    4   post                            0x0000000104ec8874 -[PFEncoder encodeObject:] + 113
    5   post                            0x0000000104e97e3f __129+[PFRESTQueryCommand findCommandParametersWithOrder:conditions:selectedKeys:includedKeys:limit:skip:extraOptions:tracingEnabled:]_block_invoke97 + 1808
    6   CoreFoundation                      0x0000000106c4acb5 __65-[__NSDictionaryI enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke + 85
    7   CoreFoundation                      0x0000000106c4abbd -[__NSDictionaryI enumerateKeysAndObjectsWithOptions:usingBlock:] + 237
    8   post                            0x0000000104e9764d +[PFRESTQueryCommand findCommandParametersWithOrder:conditions:selectedKeys:includedKeys:limit:skip:extraOptions:tracingEnabled:] + 911
    9   post                            0x0000000104e9727c +[PFRESTQueryCommand findCommandParametersForQueryState:] + 296
    10  post                            0x0000000104e96d2f +[PFRESTQueryCommand findCommandForQueryState:withSessionToken:] + 79
    11  post                            0x0000000104ea8c89 __78-[PFQueryController findObjectsAsyncForQueryState:withCancellationToken:user:]_block_invoke + 106
    12  post                            0x0000000104e4dd0e __37+[BFTask taskFromExecutor:withBlock:]_block_invoke + 78
    13  post                            0x0000000104e4f470 __55-[BFTask continueWithExecutor:block:cancellationToken:]_block_invoke_2 + 112
    14  libdispatch.dylib                   0x0000000108c18e5d _dispatch_call_block_and_release + 12
    15  libdispatch.dylib                   0x0000000108c3949b _dispatch_client_callout + 8
    16  libdispatch.dylib                   0x0000000108c21bef _dispatch_root_queue_drain + 1829
    17  libdispatch.dylib                   0x0000000108c214c5 _dispatch_worker_thread3 + 111
    18  libsystem_pthread.dylib             0x0000000108f81a9d _pthread_wqthread + 729
    19  libsystem_pthread.dylib             0x0000000108f7f3dd start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException

добавленная информация: когда я нажимаю кнопку регистрации, она переходит к tableviewcontroller, я попытался удалить переход, и он зарегистрировал пользователя. похоже, что ошибка внутри моего tableviewconller. это код внутри.

    //creating a pointer
    var userPointer = PFUser.objectWithoutDataWithObjectId(PFUser.currentUser()?.objectId)

    query.whereKey("postedBy", equalTo: userPointer)

    query.orderByDescending("createdAt")
    if PFUser.currentUser() != nil {//added1
    let objects = query.findObjects()
    for object in (objects as? [PFObject])!{
        //print(object.objectId)
        self.dataSource.append(object)
        self.createdByDate.append((object.objectForKey("closingDate") as? NSDate)!)
        print(dataSource)
        print(createdByDate)
    }
    let itemArr:PFObject = self.dataSource[indexPath.row] as! PFObject
    cell?.companyPostLabel.text = (PFUser.currentUser()?.objectForKey("companyName")!.capitalizedString)! as String
    cell?.occupationPostLabel.text = itemArr["occupation"]!.capitalizedString as! String

    let companyImage: PFFile?
    companyImage = PFUser.currentUser()?.objectForKey("profileImageEmployer") as! PFFile
    companyImage?.getDataInBackgroundWithBlock({ (data, error) -> Void in
        if error == nil{
            cell?.companyLogoImage.image = UIImage(data: data!)
        }
    })
    } else {
        print("user not found")
    }

    let dateArr = createdByDate[indexPath.row]
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy'-'MM'-'dd' : 'hh':'mm'"
    var strDate = dateFormatter.stringFromDate(dateArr)

    cell?.closingDateLabel .text = strDate

изменить 2: эта строка выдает ошибку

    let query = PFQuery(className: "JobPost")

    //creating a pointer

    var userPointer = PFUser.objectWithoutDataWithObjectId(PFUser.currentUser()?.objectId)

    query.whereKey("postedBy", equalTo: userPointer)

    let objects = query.findObjects()

    return (objects?.count)!

person suisied    schedule 15.10.2015    source источник


Ответы (1)


Сначала убедитесь, что ваш currentUser сохранен. Вы можете проверить это objectId.

if ([PFUser currentUser].objectId == nil)
  [[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    // Perform queryRole
  }];
else
  // Perform queryRole directly
person samwize    schedule 17.10.2015
comment
Привет, samwize, я добавил новую информацию, кажется, что когда я нажимаю кнопку регистрации, она переходит к контроллеру табличного представления. Я добавил код внутри контроллера tableview в посте, не могли бы вы заметить ошибку. - person suisied; 17.10.2015
comment
Вы пробовали мое предложение? Проверьте currentUser.objectId, чтобы убедиться, что пользовательский объект сохранен первым. - person samwize; 17.10.2015
comment
У меня это работает только сейчас, спасибо! вы действительно сэкономили мне кучу времени. - person suisied; 17.10.2015
comment
пожалуйста, проверьте stackoverflow.com/questions /33190993/ если у вас есть время - person suisied; 17.10.2015