Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c &引用;在「;目标c空数组_Objective C_Nsmutablearray_For In Loop - Fatal编程技术网

Objective c &引用;在「;目标c空数组

Objective c &引用;在「;目标c空数组,objective-c,nsmutablearray,for-in-loop,Objective C,Nsmutablearray,For In Loop,我注意到,在初始化的空NSMutableArray上执行目标c中的for/in操作并没有按预期工作 简化代码为: +(void) convertArray: (NSMutableArray*)arrayIN { NSMutableArray *arrayOUT = [NSMutableArray array]; NSLog(@"is nil %d - count %d", !arrayIN, [arrayIN count]); for(NSObject *o in

我注意到,在初始化的空NSMutableArray上执行目标c中的for/in操作并没有按预期工作

简化代码为:

+(void) convertArray: (NSMutableArray*)arrayIN {

    NSMutableArray *arrayOUT = [NSMutableArray array];

    NSLog(@"is nil %d - count %d", !arrayIN, [arrayIN count]);

    for(NSObject *o in arrayIN)
        [arrayOUT addObject:[o convertToAnotherClass]];

}
+(BOOL) writeTasks: (NSArray*)tasksArray {

    NSMutableArray *arr = [NSMutableArray array];
    NSLog(@"is nil %d - count %d", !arr, [arr count]);
    for(Task *t in tasksArray)
        [arr addObject:[t getDictionary]];

    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];

    if (! jsonData) {
        NSLog(@"Got an error: %@", error);
        return NO;
    } else {
        //NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        [jsonData writeToFile:path options:NSDataWritingAtomic error:nil];
        return YES;
    }
}
实际代码为:

+(void) convertArray: (NSMutableArray*)arrayIN {

    NSMutableArray *arrayOUT = [NSMutableArray array];

    NSLog(@"is nil %d - count %d", !arrayIN, [arrayIN count]);

    for(NSObject *o in arrayIN)
        [arrayOUT addObject:[o convertToAnotherClass]];

}
+(BOOL) writeTasks: (NSArray*)tasksArray {

    NSMutableArray *arr = [NSMutableArray array];
    NSLog(@"is nil %d - count %d", !arr, [arr count]);
    for(Task *t in tasksArray)
        [arr addObject:[t getDictionary]];

    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];

    if (! jsonData) {
        NSLog(@"Got an error: %@", error);
        return NO;
    } else {
        //NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        [jsonData writeToFile:path options:NSDataWritingAtomic error:nil];
        return YES;
    }
}
令人惊讶的是,执行
[dummyClass convertArray:[NSMutableArray]]
显示了以下内容:

2012-06-25 13:51:34.236 Planorama[740:707] is nil 0 - count 0
2012-06-25 13:51:34.239 Planorama[740:707] -[__NSArrayM convertToAnotherClass]: unrecognized selector sent to instance 0xde9b580
(lldb) 

为什么??arrayIN是空的,为什么还要调用
convertToAnotherClass

如果使用基于块的枚举,它将按照您想要的方式工作。 此外,输出表明o被设置为某个对象的某个实例,因此您可能还有另一个问题


最后,看起来这是一个静态方法,但您的示例将其称为实例方法。

正如Joshua Smith指出的那样:我没有检查迭代数组的计数。迭代的数组不是空的,并且包含自身,因为如果键入错误的行:

[tasks addObject:tasks]

而不是

[tasks addObject:task]

在前面的方法中

谢谢大家


注:约书亚·史密斯的链接非常有用!未来读者:看看吧

你的代码与你说的不匹配。你说
arrayIN
是空的,但是你的
NSLog
引用了
arr
,这在你的例子中根本没有提到?哎呀,我试着给了明确的名字,但是忘记了其中的一些…我可能写错了,但是调用正确,编译没有问题。我唯一的问题是,即使是使用
[NSMutableArray]
声明并显示计数为0的空数组也会被迭代。我粘贴了实际的代码。我认为简化它可能更容易,但它增加了太多的问题。就是这样!是的,您正在检查可变数组的长度,但在传入的taskArray上进行迭代。当然,新实例化的可变数组的长度为0,但在此调试输出中,taskArray参数的长度似乎大于0。