淺談電商App之我的足跡

最近有個新需求,就是做下電商App基本都有的功能-足跡,簡單的說不就是瀏覽記錄嘛。設(shè)計(jì)圖是下面這樣滴!


我的足跡列表.png

看上去設(shè)計(jì)圖也很正常,該有的都有了,只要數(shù)據(jù)沒問題,基本就是寫下界面就over了,萬萬沒想到,問題就出現(xiàn)在這數(shù)據(jù)上,所有數(shù)據(jù)竟然是客戶端自己存,自己取,完完全全的一個本地瀏覽記錄啊??,既然需求確定是這樣了,那就沒辦法只能開始了。

存數(shù)據(jù)

數(shù)據(jù)怎么存呢?下面幾種數(shù)據(jù)持久化方案都行:

  • plist文件
  • NSUserDefaults
  • NSKeyedArchiver
  • 數(shù)據(jù)庫
  • CoreData
    這里由于趕時間就偷了個懶,選用了NSUserDefaults 來存儲數(shù)據(jù)(應(yīng)該首選數(shù)據(jù)庫和CoreData)。
    然后需要存一些什么數(shù)據(jù)呢?業(yè)務(wù)需要,我們每條數(shù)據(jù)都需要有commodityId(商品id),commodityInfoId(商品信息sku),scanTime(商品瀏覽時間)。由于商品id是唯一的,這里我就采用了字典key的唯一性來進(jìn)行去重,只保留最新的瀏覽記錄。
- (NSMutableDictionary *)commodityDic {
    if (!_commodityDic) {
        _commodityDic = [NSMutableDictionary dictionaryWithDictionary:[self.storageDic objectForKey:@"用戶userId"];
    }
    return _commodityDic;
}
- (NSMutableArray *)commodityArray {
    if (!_commodityArray) {
        _commodityArray = [NSMutableArray array];
    }
    return _commodityArray;
}

NSString *insetStr = [NSString stringWithFormat:@"%@|%@", scanTime,commodityInfoId];
[self.commodityDic setObject:insetStr forKey:commodityId];   
[self.storageDic setObject:self.commodityDic forKey:@"用戶userId"];
[[NSUserDefaults standardUserDefaults] setObject:self.storageDic forKey:@"你的key"];
[[NSUserDefaults standardUserDefaults] synchronize];
//兩個字典的結(jié)構(gòu)是這樣的:
self.commodityDic {
    ZMCOMD132170419142301330 = "2017-11-14 17:56:49|ZMCOMD132170419142301330170419142301304";
    ZMCOMD426170808141848800 = "2017-11-14 15:05:35|ZMCOMD426170808141848800170808141848472";
    ZMCOMD881170710143358733 = "2017-11-14 17:48:46|ZMCOMD881170710143358733170710143358515";
    ZMCOMD956171018164822665 = "2017-11-14 17:48:39|ZMCOMD956171018164822665171018164822894";
}
self.storageDic
{
    16050368695640 =     {
        ZMCOMD233170802151805643 = "2017-11-14 10:30:02|647060";
        ZMCOMD593170208112702710 = "2017-11-14 10:29:57|ZMCOMD593170208112702710170208112702912";
    };
    17091455092851 =     {
        ZMCOMD132170419142301330 = "2017-11-14 17:56:49|ZMCOMD132170419142301330170419142301304";
        ZMCOMD426170808141848800 = "2017-11-14 15:05:35|ZMCOMD426170808141848800170808141848472";
        ZMCOMD881170710143358733 = "2017-11-14 17:48:46|ZMCOMD881170710143358733170710143358515";
        ZMCOMD956171018164822665 = "2017-11-14 17:48:39|ZMCOMD956171018164822665171018164822894";
    };
}

好了,數(shù)據(jù)這樣就算是存上了??。

取數(shù)據(jù)

//根據(jù)用戶id來取數(shù)據(jù)
NSMutableDictionary *disorderlyDic = [self.storageDic objectForKey@"用戶userId"];
    NSArray *keysArray = disorderlyDic.allKeys;
    NSArray *valuesArray = disorderlyDic.allValues;
    //按時間進(jìn)行排序
    NSArray *sortArray = [valuesArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        return [obj2 compare:obj1 options:NSNumericSearch];
    }];
    NSMutableArray *orderlyArray = [NSMutableArray array];
    for (NSInteger i = 0; i < sortArray.count; i++) {
        NSInteger index = [valuesArray indexOfObject:sortArray[i]];
        NSString *key = keysArray[index];
        NSString *value = sortArray[i];
        [orderlyArray addObject:@{key:value}];
    }
//按時間排序后的數(shù)據(jù)是這樣的
sortArray
<__NSArrayI 0x60800024f9f0>(
2017-11-14 17:56:49|ZMCOMD132170419142301330170419142301304,
2017-11-14 17:48:46|ZMCOMD881170710143358733170710143358515,
2017-11-14 17:48:39|ZMCOMD956171018164822665171018164822894,
2017-11-14 15:05:35|ZMCOMD426170808141848800170808141848472
)
orderlyArray
<__NSArrayM 0x60800005b7e0>(
{
    ZMCOMD132170419142301330 = "2017-11-14 17:56:49|ZMCOMD132170419142301330170419142301304";
},
{
    ZMCOMD881170710143358733 = "2017-11-14 17:48:46|ZMCOMD881170710143358733170710143358515";
},
{
    ZMCOMD956171018164822665 = "2017-11-14 17:48:39|ZMCOMD956171018164822665171018164822894";
},
{
    ZMCOMD426170808141848800 = "2017-11-14 15:05:35|ZMCOMD426170808141848800170808141848472";
}
)

數(shù)據(jù)合并,排序

//將時間相同的合并在一起
NSDictionary *commodityAllDic = [NSMutableDictionary dictionary];
for (NSInteger i = 0; i < orderlyArray.count; i ++) {
    NSDictionary *comDic = self.commodityArray[i];
    NSString *comTime = [[comDic.allValues[0] componentsSeparatedByString:@"|"][0] substringWithRange:NSMakeRange(0, 10)];
     NSMutableArray *array = [self.commodityAllDic objectForKey:comTime];
      if (!array) {
          array =[NSMutableArray array];
      }
     [array addObject:comDic.allKeys[0]];
     [commodityAllDic setObject:array forKey:comTime]; 
}
//按時間排序
NSArray *keyArray = [self.commodityAllDic allKeys];
NSArray *sortArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
      return [obj2 compare:obj1 options:NSNumericSearch];
}];
//數(shù)據(jù)結(jié)構(gòu)是這樣的
commodityAllDic
{
    "2017-11-14" =     (
        ZMCOMD132170419142301330,
        ZMCOMD881170710143358733,
        ZMCOMD956171018164822665,
        ZMCOMD426170808141848800
    );
}
sortArray
<__NSSingleObjectArrayI 0x60800001d7c0>(
2017-11-14
)

做到這一步數(shù)據(jù)處理基本完事了,有sortArray,我們可以取到commodityAllDic對應(yīng)的commodityId,根據(jù)commodityId,我們可以取到存取的數(shù)據(jù)。

刪除數(shù)據(jù)

這個就簡單了

- (void)removeCommodityWithCommodityId:(NSMutableArray *)commodityIdArray {
    for (NSString *commodityId in commodityIdArray) {
        [self.commodityDic removeObjectForKey:commodityId];
    }
    [self.storageDic setObject:self.commodityDic forKey:@"用戶userId"];
    [[NSUserDefaults standardUserDefaults] setObject:self.storageDic forKey:@"你的key"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

分頁加載數(shù)據(jù)

上面的幾個都搞定了,這個也比較簡單了,確定每一頁需要顯示的個數(shù),從排序后orderlyArray中依次取出相對應(yīng)的個數(shù),然后按照數(shù)據(jù)合并,排序的方法,來進(jìn)行整合數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容