数组内部的数据在iOS中的块外部不可见

时间:2013-10-04 16:31:11

标签: ios objective-c arrays nsarray objective-c-blocks

我正在开发一个iOS应用程序,用于解析csv文件中的数据。我能够成功解析数据,将数据存储到数组中,然后将数组的内容打印到控制台。但是,我无法在迭代的块之外查看数组的内容。这是我正在使用的代码:

#import "TestData.h"

@interface TestData ()

@property (nonatomic, strong) NSMutableArray *array;

@end

@implementation TestData

- (void) addData {


    NSString *file = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"csv"];

    [self.array = [[NSMutableArray alloc] init];
     __weak TestData *wSelf = self;
    [CSVParser parseCSVIntoArrayOfArraysFromFile:file
                withSeparatedCharacterString:@","
                        quoteCharacterString:nil
                                   withBlock:^(NSArray *array, NSError *error) {
                                       __strong TestData *sSelf  = wSelf;
                                       [sSelf.array setArray: array];
                                       //self.array = array;
                                       //NSLog(@"%@", self.array);

                                   }];
     NSLog(@"%@", self.array);

}

我想在块之外使用self.array的全部内容。谁能看到我做错了什么?

感谢所有回复的人。

1 个答案:

答案 0 :(得分:0)

试试这个:

self.array = [[NSMutableArray alloc] init];
__weak MyViewController *wSelf = self;
[CSVParser parseCSVIntoArrayOfArraysFromFile:file
            withSeparatedCharacterString:@","
                    quoteCharacterString:nil
                               withBlock:^(NSArray *array, NSError *error) {
                                   dispatch_async(dispatch_get_main_queue(), ^{
                                        __strong MyViewController *sSelf  = wSelf;
                                       [sSelf doSomethingWithMyData:array];
                                   }
                               }];

此外,如果您的解析器是异步的,则在解析数据实际完成之前,您可能正在打印块外部的日志语句。

此外,通过在块内使用弱和强引用,可以避免保留周期。