【问题标题】:problem when trying to put the content of NSArray in NSMutableArray尝试将 NSArray 的内容放入 NSMutableArray 时出现问题
【发布时间】:2011-05-04 13:36:18
【问题描述】:

请我尝试将两个 NSArray 的内容放在两个 NSMutableArray 中,但它似乎不起作用:

NSMutableArray *newArrayTypeCarburant = [[NSMutableArray alloc]init];
    NSMutableArray *newArrayNomStation = [[NSMutableArray alloc]init];
    for(int i=0; i <[topStation.listeTypesDesCarburants count]; i++)
    {
        [newArrayTypeCarburant addObjectsFromArray: [topStation.listeTypesDesCarburants objectAtIndex:i]]; 
    }
    for(int i=0; i <[topStation.listeDesEnseignes count]; i++)
    {
        [newArrayNomStation addObjectsFromArray: [topStation.listeDesEnseignes objectAtIndex:i]]; 
    }

topStation.listeDesEnseignestopStation.listeTypesDesCarburants 是在 appdelegate 类中声明的两个 NSArray 和全局变量。请帮助,谢谢提前))

编辑 我试试看:

NSMutableArray *newArrayTypeCarburant = [[NSMutableArray alloc]init];
    NSMutableArray *newArrayNomStation = [[NSMutableArray alloc]init];



    for(int i=0; i <[topStation.listeTypesDesCarburants count]; i++)
    {
        [newArrayTypeCarburant addObject: [topStation.listeTypesDesCarburants objectAtIndex:i]]; 
    }
    for(int i=0; i <[topStation.listeDesEnseignes count]; i++)
    {
        [newArrayNomStation addObject: [topStation.listeDesEnseignes objectAtIndex:i]]; 
    }
    self.pickerArrayTypeCarburant = newArrayTypeCarburant;
    self.pickerArrayNomStation = newArrayNomStation;

第一个选择器包含数组中的值,但是当我尝试单击第二个选择器时,抛出异常:

2011-05-04 15:10:06.631[1065:207] -[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x6e389a0
2011-05-04 15:10:06.633[1065:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x6e389a0'

【问题讨论】:

    标签: ios nsmutablearray nsarray


    【解决方案1】:

    您正在使用 NSArray addObjectsFromArray: 它将复制整个数组,但您为每个容器成员执行一次(并且没有传递正确的类型,因为它需要一个 NSArray 引用并且您正在传递单个元素)。而是尝试像这样复制数组并删除 for 循环:

    [newArrayTypeCarburant addObjectsFromArray: topStation.listeTypesDesCarburants];
    [newArrayNomStation addObjectsFromArray: topStation.listeDesEnseignes];
    

    如果您仍需要一次浏览一个,请使用您拥有的代码,但将 addObjectsFromArray: 更改为 addObject:

    for(int i=0; i <[topStation.listeTypesDesCarburants count]; i++)
    {
        // perhaps some predicate here...
        [newArrayTypeCarburant addObject: [topStation.listeTypesDesCarburants objectAtIndex:i]]; 
    }
    

    【讨论】:

    • 当我尝试解析第二个数组时,我有:{"ssiphone_enseigne":"SHELL","0":"SHELL"},{"ssiphone_enseigne":"ELF","0":"ELF"},{"ssiphone_enseigne":"BP","0":"BP"},{"ssiphone_enseigne":"AGIP","0":"AGIP"},{"ssiphone_enseigne":"CARREFOUR","0":"CARREFOUR"},{"ssiphone_enseigne":"CASINO","0":"CASINO"},{"ssiphone_enseigne":"ESSO","0":"ESSO"},{"ssiphone_enseigne":"AUCHAN","0":"AUCHAN"},{"ssiphone_enseigne":"LECLERC","0":"LECLERC"},{"ssiphone_enseigne":"AVIA","0":"AVIA"},{"ssiphone_enseigne":"SUPER U","0":"SUPER U"},{"ssiphone_enseigne":null,"0":null},{"ssiphone_enseigne":"AUTRE","0":"AUTRE"}
    • 然而,在 web 服务端,数组仅由以下元素组成:SHELL, ELF,BP, AGIP,CARREFOUR,CASINO,ESSO,AUCHAN,LECLERC,AV­IA,SUPER U,AUTRE
    • 乍一看,我会说您正在尝试将字典与数组混合。
    【解决方案2】:

    你可以只使用 arrayWithArray。

    NSMutableArray *newArrayNomStation = [NSMutableArray arrayWithArray:topStation.listeDesEnseignes];
    

    【讨论】:

    • 嗨,好的,但是当我尝试将每个数组分配给 UIPicker 时,我在执行时在日志中收到了该错误:Program received signal: “EXC_BAD_ACCESS”. 这段代码:pickerArrayTypeCarburant = newArrayTypeCarburant; pickerArrayNomStation = newArrayNomStation;
    • 这看起来像是内存管理问题。有些东西发布得太早了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多