0

我正在开发一个 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 的全部内容。谁能看到我做错了什么?

4

1 回答 1

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

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

此外,通过在块中使用对 self 的弱引用和强引用,可以避免保留循环。

于 2013-10-04T16:36:08.233 回答