2016-08-20 2 views
6

Мы пытаемся создать простую функцию для нашего приложения IOS. У нас есть два API нашего Brand API с массивом объектов, содержащих уникальные идентификаторы для наших брендов в каждом объекте. И наш Firebase API, где мы храним пользователей. В пределах он имеет ключ, называемый следующимиBrands, и массив объектов, называемых состоящими из маркера API unique brand ids from our, в виде ключей со значением true. Объекты создаются после того, как пользователь следил за брендом от симпатии к бренду в нашем приложении.Реализация функции Liking с использованием двух API через клиентскую сторону в качестве приложения IOS (Swift)

Когда приложение загружается, мы проверяем, соответствуют ли идентификационные номера ключей Firebase API идентификатору торговой марки Brand API, а затем показывают звезду, указывающую, что пользователь уже следит за брендом.

Наша проблема: Brand API реализована с разбивкой по страницам (т. Е. Смещение), так как мы проверим все марки, за которыми они следуют, если не все уникальные идентификаторы бренда будут доступны для сравнения с нашими Firebase API?

Мы используем swift на стороне IOS. И Brand API построен с использованием Джанго-tastypie

Firebase API

"user_id" : { 
    "currentFollowingCount" : 0, 
    "displayName" : "", 
    "email" : "", 
    "followingBrands" : { 
    "unique_brand_id" : true 
    }, 
    "provider" : "Facebook", 
    "userID" : "user_id" 
} 

Марка API

{ 
    "labels": [ 
    { 
     "id": "unique_brand_id" 
    } 
    ], 
    "meta": { 
    "limit": 10, 
    "next": "/api/?limit=10&offset=10", 
    "offset": 0, 
    "previous": null, 
    "total_count": 33 
    } 
} 

ответ

1

вы можете сделать трюк, просто покажите звезду всякий раз, когда есть идентификатор brandID, равный вам fireBase nextBrands key. вам не нужно проверять его в brandAPI, поскольку я думаю, что вы уже вставляете каждую марку, за которой следует пользователь в fireBaseAPi, так что это сработает для вас.

let fireBaseResponse:[String:AnyObject?] = [ 
         "followingBrands":["unique_brand_id":true] 
         ] 

let customObject = ["customObjectBrandID":"unique_brand_id"]//yourObject 

let followingBrandsArr = (fireBaseResponse["followingBrands"] as! [String:Bool]).keys 

//now do a check for Star 
let myObjectBrandID = customObject["customObjectBrandID"] 
if followingBrandsArr.contains(myObjectBrandID!) == true{ 
    print("user is following this brand so show the follow star") 
}else{ 
    print("don't show or hide it") 
} 
1

Это не совсем понятно, что вы пытаетесь сделать, чтобы быть честным. Бренд API не делает много, или? Или это перевод между внутренними идентификаторами и уникальными идентификаторами бренда? Если да, то почему?

В качестве простого решения проблемы вы можете отключить разбивку на страницы, в соответствии с вашим результатом tastypie в вашем наборе всего 33 записи, поэтому устанавливаем лимит либо через класс Meta, например. max_limit = 1000 или при вызове ресурса API через ?limit=1000 должен возвращать все объекты. Если они не сильно изменятся, вы, вероятно, должны применить некоторое кэширование.