函数变量变为零

时间:2014-05-10 14:55:31

标签: ios objective-c

我的目标C代码中有一个奇怪的问题。我正在开发一个iPhone应用程序(iOS 7及更高版本)。

我有一个定义如下的函数

@interface SomeClassName : NSObject 
@property (nonatomic, strong) NSMutableArray *someArray;

@implementation SomeClassName
@synthesize someArray;

- (void) removeFromSomething:(NSIndexPath *)indexPath {

    NSMutableArray *sectionArray = [self.someArray objectAtIndex:indexPath.section];
    [sectionArray removeObjectAtIndex:indexPath.row];

    if (((int)[sectionArray count]) == 0) {
        [self.someArray removeObjectAtIndex:indexPath.section];
    }

}

变量sectionArray总是返回Nil,即使self.someArray有元素,indexPath.section指向self.someArray中的元素。

当我这样做时,这神奇地起作用了。

@interface SomeClassName : NSObject 
@property (nonatomic, strong) NSMutableArray *someArray;

@implementation SomeClassName
@synthesize someArray;

NSMutableArray *sectionArray;

- (void) removeFromSomething:(NSIndexPath *)indexPath {

        sectionArray = [self.someArray objectAtIndex:indexPath.section];
        [sectionArray removeObjectAtIndex:indexPath.row];

        if (((int)[sectionArray count]) == 0) {
            [self.someArray removeObjectAtIndex:indexPath.section];
        }

    }

直到现在才发生这种情况(我的项目已经完成,我也在设备中进行了测试)。这个问题最近出现了,不仅在这个函数中,这在整个应用程序中都会发生,从而导致不正确的行为。

我是iOS开发的新手,这是我计划在AppStore中发布的第一个应用程序。知道出了什么问题或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题可能是你混淆了NSArrayNSMutableArrayindexPath.section处的元素很可能是一个普通数组,而不是一个可变数组。虽然保存数组的数组可以是可变的,但是如果您明确地使用它们,那么数组元素只是可变的。

因此,您将数组分配给可变数组变量。编译器不会抱怨,因为可变数组是数组的子类。我认为,无论如何,可变数组变量将保持不可变数组的保证行为。也许这就是你获得nil的原因。

在任何情况下,当您尝试从非可变数组中删除内容时(即使将其放入类型为NSMutableArray的变量中),它肯定无效。

从数组创建可变数组的方法是

NSMutableArray *mutable = [NSMutableArray arrayWithArray:nonMutableArray];

NSMutableArray *mutable = nonMutableArray.mutableCopy;

您必须将修改后的数组复制回数组(同样作为非可变版本)。