麻烦从UiAlertAction传递参数

时间:2015-11-30 19:50:41

标签: ios objective-c memory increment

我有一个名为 MapLayer 的自定义NSObject,以及一个名为 layersMutableArray 的MapLayers的NSMuttableArray。按下按钮,我放了一个 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),转换和其他技巧。任何帮助非常感谢!

1 个答案:

答案 0 :(得分:2)

摆脱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的增量移动到块的外部。