2016-03-18 70 views
0

我試圖獲取對象(用戶)的索引,在一對多關係中。它返回nil。獲取對象的索引返回nil

import Foundation 

class Groups : NSObject{ 

     var groupName: String? 
     var UsersInGroup = [BackendlessUser]() 
     var ownerId: String? 
     var objectId : String? 

} 

func getIndex() { 

    self.backendless.userService.getPersistentUser() 
    let user = self.backendless.userService.currentUser 


    var dataStore = backendless.data.of(Groups.ofClass()) 
    dataStore.findID(
     "B52F6BEA-79F8-A58B-FF15-AF840BCB2A00", 
     response: { (result: AnyObject!) -> Void in 
      var LookingForGroupJoining = result as! Groups 
      // LookingForGroupJoining.UsersInGroup.append(user) 
      let index = LookingForGroupJoining.UsersInGroup.indexOf(user) 
      print("This is the index number : \(index)") 
      print("This is the user : \(user)") 
      print("These are all the values of the UsersInGroup : \(LookingForGroupJoining.UsersInGroup)") 


      dataStore.save(
       LookingForGroupJoining, 
       response: { (result: AnyObject!) -> Void in 
        let GroupJoining = result as! Groups 
        print("Group has been saved: \(GroupJoining.groupName)") 

       }, 
       error: { (fault: Fault!) -> Void in 
        print("Server reported an error (1): \(fault)") 
      }) 


      print("Group has been found: \(LookingForGroupJoining.objectId)") 
     }, 
     error: { (fault: Fault!) -> Void in 
      print("Server reported an error (2): \(fault)") 
    }) 
} 

這裏是控制檯輸出

This is the index number : nil 
This is the user : <BackendlessUser> { 
    "__meta" = "{\"relationRemovalIds\":{},\"selectedProperties\":[\"__updated__meta\",\"password\",\"created\",\"name\",\"___class\",\"ownerId\",\"updated\",\"objectId\",\"email\"],\"relatedObjects\":{}}"; 
    created = "2016-03-07 06:06:40 +0000"; 
    email = "[email protected]"; 
    lastLogin = "2016-03-11 04:30:01 +0000"; 
    name = "<null>"; 
    objectId = "4A955ADD-7991-1AF8-FFEF-3754587B2300"; 
    ownerId = "<null>"; 
    updated = "<null>"; 
    "user-token" = "18C87E0E-2BB3-DB1D-FF63-3CD5FE003200"; 
} 
These are all the values of the UsersInGroup : [<BackendlessUser> { 
    "___class" = Users; 
    created = "2016-03-07 03:45:05 +0000"; 
    email = "[email protected]"; 
    name = test; 
    objectId = "0EB97FF9-FBF1-2E7E-FF30-160BB6CFFC00"; 
    ownerId = "<null>"; 
    password = "<null>"; 
    updated = "2016-03-18 22:33:02 +0000"; 
}, <BackendlessUser> { 
    "___class" = Users; 
    created = "2016-03-07 06:06:40 +0000"; 
    email = "[email protected]"; 
    name = "<null>"; 
    objectId = "4A955ADD-7991-1AF8-FFEF-3754587B2300"; 
    ownerId = "<null>"; 
    password = "<null>"; 
    updated = "2016-03-18 22:33:02 +0000"; 
}, <BackendlessUser> { 
    "___class" = Users; 
    created = "2016-03-06 04:15:27 +0000"; 
    email = "[email protected]"; 
    name = "<null>"; 
    objectId = "570CD92B-74EB-1325-FF8F-B866CB6CB400"; 
    ownerId = "<null>"; 
    password = "<null>"; 
    updated = "2016-03-18 22:33:02 +0000"; 
}, <BackendlessUser> { 
    "___class" = Users; 
    created = "2016-03-05 04:50:14 +0000"; 
    email = "[email protected]"; 
    name = test; 
    objectId = "A0831585-716E-B027-FF37-539497748400"; 
    ownerId = "<null>"; 
    password = "<null>"; 
    updated = "2016-03-18 22:33:02 +0000"; 
}, <BackendlessUser> { 
    "___class" = Users; 
    created = "2016-03-05 14:54:53 +0000"; 
    email = "[email protected]"; 
    name = test; 
    objectId = "C8A47476-E5D2-B84D-FF5A-2EB605040400"; 
    ownerId = "<null>"; 
    password = "<null>"; 
    updated = "2016-03-18 22:33:02 +0000"; 
}] 

我試圖得到一個對象(用戶)的指數,在一對多的關係。它返回nil。

回答

0

找到一種解決方法

func leavingGroup() { 

    self.backendless.userService.getPersistentUser() 
    let user = self.backendless.userService.currentUser 

    var dataStore = backendless.data.of(Groups.ofClass()) 
    dataStore.findID(
     "B52F6BEA-79F8-A58B-FF15-AF840BCB2A00", 
     response: { (result: AnyObject!) -> Void in 
      var LookingForGroupJoining = result as! Groups 

      var groupList = LookingForGroupJoining.UsersInGroup.description 
      // 「Cleaned」 groupList of unnecessary data and created groupListCleaned 
      var groupListCleaned: String = groupList.stringByReplacingOccurrencesOfString("\"", withString: "").stringByReplacingOccurrencesOfString("<BackendlessUser> {", withString: "").stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString("___class=Users;", withString: "").stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).stringByReplacingOccurrencesOfString("},", withString: "").stringByReplacingOccurrencesOfString("]", withString: "").stringByReplacingOccurrencesOfString("}", withString: "").stringByReplacingOccurrencesOfString("[", withString: "").stringByReplacingOccurrencesOfString("created=", withString: "").stringByReplacingOccurrencesOfString("email=", withString: "").stringByReplacingOccurrencesOfString("name=", withString: "").stringByReplacingOccurrencesOfString("objectId=", withString: "").stringByReplacingOccurrencesOfString("ownerId=", withString: "").stringByReplacingOccurrencesOfString("password=", withString: "").stringByReplacingOccurrencesOfString("updated=", withString:"").stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 



      // Converting groupListClean from a string to an array called arrayofUsers, where the arrays values are anything between whitespace, so the string cookie = 「chocolate cake hottea」 would be an array [「chocolate」, 「cake」, 「hottea"] 

      let arrayofUsers: Array = groupListCleaned.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 

      // Converting arrayofUsers into string, and replacing some characters. I did the filter here instead of groupList because it produced different results, and I preferred these results here. 
      var groupListClean2: String = arrayofUsers.joinWithSeparator("").stringByReplacingOccurrencesOfString(";", withString: ",") 


      // Once I’ve cleaned the string completely, I’m turning it into an array again called arrayofUsers2. I’m separating everything with a coma. 
      var arrayofUsersData: Array = groupListClean2.componentsSeparatedByString(",") 

      // I’m getting the index number of the current user's objectId in the data. It pulls out the index of one property belonging to one user, in a list of properties belonging to many users. 
      var indexnumber = arrayofUsersData.indexOf(user.objectId) 
      var indexnumber2 = indexnumber 
      var index = 0 

      // Since objectIds are always in the same location (7 sway from the next), if its less than really 6 (I set 3 to be safe), then its the users index is 0. If its not, then I’ll keep subtracting by 7, and incrementing the index value each time I subtract. Each user can be identified by jumping 7 indexes, this shows me how many times I have to do that jump, the amount of times is where the user is. 

      if indexnumber2 <= 3 { 
       index = 0 
      } else { 
       repeat { 

        indexnumber2 = indexnumber2! - 7 
        index = index + 1 
       } while indexnumber2 > 3 
      } 


      LookingForGroupJoining.UsersInGroup.removeAtIndex(index) 

      dataStore.save(
       LookingForGroupJoining, 
       response: { (result: AnyObject!) -> Void in 
        let GroupJoining = result as! Groups 
        print("Group has been saved: \(GroupJoining.groupName)") 

       }, 
       error: { (fault: Fault!) -> Void in 
        print("Server reported an error (1): \(fault)") 
      }) 


      print("Group has been found: \(LookingForGroupJoining.objectId)") 
     }, 
     error: { (fault: Fault!) -> Void in 
      print("Server reported an error (2): \(fault)") 
    }) 
}