0

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 の内容全体を使用したいと思います。誰が私が間違っているのかを見ることができますか?

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

また、パーサーが非同期の場合、データの解析が実際に完了する前に、ブロック外のログ ステートメントが出力される可能性があります。

また、ブロック内で自己への弱い参照と強い参照を使用することで、保持サイクルを回避できます。

于 2013-10-04T16:36:08.233 に答える