获取对象的索引返回nil

时间:2016-03-18 22:51:40

标签: json swift

我正在尝试以一对多的关系获取对象(用户)的索引。它返回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 = "test@test.com";
    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 = "lekan.adeyeri@gmail.com";
    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 = "test@test.com";
    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 = "tesbhjbj@ttt.tyy";
    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 = "test@testmail.test";
    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 = "test1@testmail.test";
    name = test;
    objectId = "C8A47476-E5D2-B84D-FF5A-2EB605040400";
    ownerId = "<null>";
    password = "<null>";
    updated = "2016-03-18 22:33:02 +0000";
}]

我正在尝试以一对多的关系获取对象(用户)的索引。它返回nil。

1 个答案:

答案 0 :(得分: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)")
    })
}
相关问题