2016-08-18 1 views
1

최근에 코드의 가독성과 청결성에 어려움을 겪었습니다. 다음 메소드는 정상적으로 실행되고 필요한 모든 것을 수행합니다.백그라운드에서 최상의 기술을 파싱하십시오.

/** 
    Creates a new `Group` and adds the currently logged in user as the `groupOwner`. 

    - parameter name:  The name of the group 
    - parameter completion: Called when the save request has completed passing back the newly saved `Group`. If an error occured it will be returned and `group` will be `nil`. 
    */ 
    static func createNewGroup(name: String, completion:(group: Group?, error: NSError?) ->()) { 

     // Instantiate our new `Group` 
     let newGroup = Group() 
     newGroup.groupName = name 
     newGroup.groupOwner = User.currentUser()! 

     newGroup.saveInBackgroundWithBlock { (success, error) in 

      // There was some problem saving the newGroup so return the error 
      if let err = error { 
       completion(group: nil, error: err) 
      } 

      // The newGroup was saved OK. 
      else { 

       // Now, since we've successfully saved the newGroup, we can append that to our current user. 
       User.currentUser()!.ownedGroups.append(newGroup) 

       // 
       // HERE IS MY QUESTION 
       // 
       // Next up is the save the current user since he/she has been modified. 
       User.currentUser()?.saveInBackgroundWithBlock({ (success, error) in 

        // If there was some error saving the user, then we should delete the newGroup so it isn't hanging around in the db. 
        if let err = error { 
         newGroup.deleteInBackground() 
         completion(group: nil, error: err) 
        } 

        // Everything went OK some return our recently saved newGroup 
        else { 
         completion(group: newGroup, error: nil) 
        } 
       }) 
      } 
     } 
    } 

내 질문은 내가 saveInBackgroundWithBlock와 현재 사용자를 저장해야한다 :

내 질문 arrises 선을 표시 한? 이 방법은 훨씬 더 우아하고 올바른 중첩 된 블록 위가 아닌 것 같다

/** 
    Creates a new `Group` and adds the currently logged in user as the `groupOwner`. 

    - parameter name:  The name of the group 
    - parameter completion: Called when the save request has completed passing back the newly saved `Group`. If an error occured it will be returned and `group` will be `nil`. 
    */ 
    static func createNewGroup(name: String, completion:(group: Group?, error: NSError?) ->()) { 

     // Instantiate our new `Group` 
     let newGroup = Group() 
     newGroup.groupName = name 
     newGroup.groupOwner = User.currentUser()! 

     newGroup.saveInBackgroundWithBlock { (success, error) in 

      // There was some problem saving the newGroup so return the error 
      if let err = error { 
       completion(group: nil, error: err) 
      } 

      // The newGroup was saved OK. 
      else { 

       // Now, since we've successfully saved the newGroup, we can append that to our current user. 
       User.currentUser()!.ownedGroups.append(newGroup) 

       // Save and return 
       User.currentUser()?.saveInBackground() 
       completion(group: newGroup, error: nil) 
      } 
     } 
    } 

그러나, 어떤 임의의 가장자리 경우가 완료되지 않습니다 백그라운드에서 사용자에 저장 저에 관한 것이다. 그런 다음이 Group 개체가 내 데이터베이스에 걸려있을 것이며 사용자는 다음 번에 앱을로드 할 때 해당 개체를 볼 수 없습니다.

내 두려움이 틀렸거나 본래의 방법으로이 기능을 구성하는 적절한 방법이 있습니까?

답변

0

나는 원래의 방법이 올바른 방법이라고 생각합니다. 그리고 한 가지 더, 백그라운드에서 저장하는 동안 activityindicator를 표시해야합니다.

+0

네트워킹 클래스에 이러한 메소드가 있으므로 모든 UI가 다음 함수와 별도로 수행됩니다. – random