我有一个名为MapLayer的自定义NSObject和一个MapLayers的NSMuttableArray,其创意名称为layersMutableArray。按下按钮时,我放置了一个UIAlertController。我用我的MapLayers列表填充此警报,如下所示:

    __block NSInteger *n;
    n = 0;
    for (MapLayer *m in layersMutableArray) {
        UIAlertAction *newAction = [UIAlertAction actionWithTitle:m.sLayerName style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            MapLayer *ml = layersMutableArray[(int)n];
            curLayer = ml;
            [self loadSpecificLayer];
            n++;
        }];
        [layerSelectionAlertView addAction:newAction];
    }


现在,所有这些工作正常。我的AlertView显示所有正确的内容。

这是问题所在:当我单击“图层”(UIAlertAction),并调用loadSpecficLayer方法时,它始终只是重新加载我的第一层。我认为我在内存分配和我的int(创意名称为n)上做错了什么,以至于它总是被记住为0而不是递增,但是我不确定。我尝试了各种类型的数字(NSInteger,int),转换和其他技巧。任何帮助,不胜感激!

最佳答案

摆脱n的使用。不需要只需做:

for (MapLayer *m in layersMutableArray) {
    UIAlertAction *newAction = [UIAlertAction actionWithTitle:m.sLayerName style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        curLayer = m;
        [self loadSpecificLayer];
    }];
    [layerSelectionAlertView addAction:newAction];
}


或者,将n的增量移到块的外部。

关于ios - 来自UiAlertAction的故障传递参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34006765/

10-10 11:51