2013-10-04 24 views
0

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

#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的完整内容。任何人都可以看到我做错了什么吗?

在此先感谢所有回复的人。

+0

添加数组的声明和初始化 –

+2

我认为你的'NSLog'是在waitBlock之前执行的。这就是为什么打印null。 – danypata

回答

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]; 
            } 
           }]; 

另外,如果您的解析器是异步的,块之外的日志语句可打印数据的分析实际上已经完成了。

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

+0

感谢您的解决方案,但我没有在ViewController中执行此代码。它位于ViewController之外的助手类中。那么你的解决方案将如何看待? – syedfa

+0

将MyViewController更改为您正在执行的类名称。 – JonahGabriel

+0

我得到一个错误,指出“没有可见的@interface for”NSArray“声明选择器”setArray“。 – syedfa