当前位置:首页 > IT技术 > 移动平台 > 正文

iOS Q&A汇总【本博客精品资源相关问题和解决方案】(持续更新)
2021-08-08 17:42:22

 

文章目录

  • 引言
  • I、签名数组ASCII码排序优化
    • 1.1 优化数组元素的排序
    • 1.2 新增集合元素排序:
    • 1.3 微信支付参数值为空不参与排序的处理方案
  • II、编译相关问题
    • 2.1 为什么我下载demo后,在xcode12中允许报错:library not found for -lAXIndicatorView;请问怎么解决?

 

引言

汇总本博客精品资源相关问题和解决方案(持续更新)

I、签名数组ASCII码排序优化

1.1 优化数组元素的排序

  • 用户你好,针对你的问题,我修改内容如下
    iOS Q&A汇总【本博客精品资源相关问题和解决方案】(持续更新)_字符串

数组的地方,我的规则是[] 表示数组,数组元素是用,分隔[,,,] 进行递归拼接的。
你认为数组ASCII码排序的地方是错误的话,你可以打印排序之后的字符串,看排序与你服务侧的拼接规则哪里不一样。把规则修改为与后台的数组排序规则一致即可。

/**
 - 处理key对应的Value是数组的情况

 */
+ (NSString *)sortedDictionaryArr:(NSArray *)arr {
    
    
    NSMutableString *contentString =[NSMutableString string];

    #pragma mark - ******** 可选

 arr =    [self sortedArrBykey:sortedArray];//

    for ( id obj in arr ) {
        
        
        
            NSString * tmp = @"";

            if(contentString.length<1 || [contentString isEqualToString:@""]){//
            
            
            
        }
        else{
            [contentString appendString:@","];
            
            
        }
        
        
        
        
              
                         if( [obj isKindOfClass:NSDictionary.class]){
                             
                    
                    
                    tmp = [self sortedDictionary:obj];
                             
                             
                    
                             
                    
                    
                    
                }
        
                // 数组就[]
                
                else         if( [obj isKindOfClass:NSArray.class]){
                    
                    
                    tmp = [self sortedDictionaryArr:obj];
                    

                                tmp = [NSString stringWithFormat:@"%@%@%@",@"{",tmp,@"}"];

                    
                }
                else{
            
            tmp=   obj;
            

            
        }



        
        
        
        [contentString appendFormat:@"%@",tmp];
        
        
        
    }
    
    
                        contentString = [NSString stringWithFormat:@"%@%@%@",@"[",contentString,@"]"];
    

    

    return contentString;
    
    
    
}

例子:编辑门店的商品的价格
请求报文:

{
  "adjustStocks" : [
    {
      "nnewStockNum" : "0",
      "productId" : "1280072986512433152",
      "newStockNum" : "0",
      "oldStockNum" : "0",
      "storeId" : "25063",
      "productSkuId" : "1280072986516627456",
      "batchNo" : ""
    }
  ],
  "modifyPrices" : [
    {
      "tagId" : "25063",
      "productNewPrice" : "5",
      "productSkuId" : "1280072986516627456",
      "type" : "1",
      "productId" : "1280072986512433152",
      "productOldPrice" : "33"
    }
  ]
}

签名元字符串的ASCII码排序

adjustStocks=[batchNo=&newStockNum=0&nnewStockNum=0&oldStockNum=0&productId=1280072986512433152&productSkuId=1280072986516627456&storeId=25063]&modifyPrices=[productId=1280072986512433152&productNewPrice=55&productOldPrice=5&productSkuId=1280072986516627456&tagId=25063&type=1]&appsecret=4f7b71

1.2 新增集合元素排序:

对于数组排序,我的初步想法是,先按照数组元素的class类型进行分组,其中的子数组是字符串类型的话,就对其进行排序之后再重新组合到新的数组中。然后再进行遍历递归拼接

/**
 
 1、新增集合元素排序:对于数组排序,我的初步想法是,先按照数组元素的class类型进行分组,其中的子数组是字符串类型的话,就对其进行排序之后再重新组合到新的数组中。然后再进行遍历递归拼接

 */
+ (NSMutableArray *)sortedArrBykey:(NSArray *)array {
    
    
    
        
    // 对数组先按照class类型进行排序
        
        //1)取出分组
    
//        NSArray *arDistinct = [array valueForKeyPath:@"@distinctUnionOfObjects.class"];//  无法获取到字典class类型
    
//    NSMutableArray *classArr = [NSMutableArray arrayWithArray:arDistinct];
    
    NSMutableArray *strclassArr = [NSMutableArray array];
    NSMutableArray *nostrclassArr = [NSMutableArray array];


    for (NSObject* obj in array) {
        
        
        if([obj isKindOfClass:NSString.class]){
            
            
            [strclassArr addObject:obj];
        }else{
            
            [nostrclassArr addObject:obj];
            

        }
        
    }
    

        //     4)按照日期进行分组
        NSMutableArray* sortedArray = [NSMutableArray array];
        
                    
    strclassArr = [strclassArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
                        return [obj1 compare:obj2 options:NSNumericSearch];
                        
                    }];
                    
                    

                    
         
                [sortedArray addObjectsFromArray:strclassArr];
    [sortedArray addObjectsFromArray:nostrclassArr];

                
                
         
    
    
    
    return sortedArray;
    
    
}



1.3 微信支付参数值为空不参与排序的处理方案

参数为空的 只要排序之前从字典移除即可。

规则的原因 :签名只对针对重要的字段,值可空的参数可不必参加

II、编译相关问题

2.1 为什么我下载demo后,在xcode12中允许报错:library not found for -lAXIndicatorView;请问怎么解决?

iOS Q&A汇总【本博客精品资源相关问题和解决方案】(持续更新)_问题与解决方案_02

原因:这是找不到 CocoaPods库 AXIndicatorView。是 AXWebViewController库依赖于它

iOS Q&A汇总【本博客精品资源相关问题和解决方案】(持续更新)_iOS_03
iOS Q&A汇总【本博客精品资源相关问题和解决方案】(持续更新)_问题与解决方案_04

  • 解决方法: 你更新 pod ‘AXWebViewController’ 即可。

1、只更新指定的库,其它库忽略:pod update AXWebViewController --verbose --repo-update
2、pod update会更新所有的类库,获取最新版本的类库

exit 0%                                                                                                                           ➜  retail git:(develop) ✗ cat ~/bin/knpod
#!/bin/sh

#该命令只安装新添加的库,已更新的库忽略

pod install --verbose --no-repo-update
#该命令只更新指定的库,其它库忽略
#pod update 库名 --verbose --no-repo-update

exit 0%                                                                                                                           ➜  retail git:(develop) ✗ 

 

本文摘自 :https://blog.51cto.com/i

开通会员,享受整站包年服务立即开通 >