iOS错误读取内存失败

时间:2014-07-30 09:33:17

标签: ios csv memory singleton

我正在使用iPad应用。

启动应用后,用户必须输入一个号码。有了这个id,我会检查一个csv文件以获取有关用户的信息。

信息以单身人士保存。这个单身人士给我带来了问题:

第1步:初始化我的单身人士

+(ASMagasin*) sharedInstance {    
    if (myMagasin == nil){
        myMagasin = [[ASMagasin alloc]init];
    }
    return myMagasin;
}

第2步:我调用可以使用csv文件的函数

- (id)init {
    if (self = [super init]) {
        NSError * error;

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString * num_magasin = [defaults objectForKey:kUserDefautNumMagasin];
        [self loadMagFromCsv:filePathCsv withMagasin:num_magasin];
    }
    return self;
}

第3步:

-(void)loadMagFromCsv:(NSString *)filePath withMagasin:(NSString *) num_magasin
{
    NSError *error;

    NSString *csvData = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    NSArray *gcRawData = [csvData componentsSeparatedByString:@"\n"];

    NSArray *singleGC = [NSArray array];

    for (int i = 0; i < gcRawData.count; i++)
    {
        NSString *nextGCString = [NSString stringWithFormat:@"%@", gcRawData[i]];
        singleGC = [nextGCString componentsSeparatedByString:@","];

        if ([singleGC[0]isEqualToString:num_magasin]){

            _num=singleGC[0];
            _libelle=singleGC[1];
            _client_defaut_nom=singleGC[2];
            _client_defaut_prenom=singleGC[3];
            _client_defaut_tel=singleGC[4];
            _client_defaut_mail=singleGC[5];

            _cp=singleGC[6];
            _ville=singleGC[7];
            _pays=singleGC[8];

        }
    }
}

在此函数中,我的变量错误在初始化之前具有此值:

  

(NSError *)error = 0x0000000000000001 domain:从0x19读取内存   失败(读取8个字节中的0个) - 代码:从0x11读取内存失败(0   读取8个字节)

我不知道如何解决这个问题以及这个错误来自何处。

debug

2 个答案:

答案 0 :(得分:0)

您正在查看堆中的随机内存。这毫无意义。您的NSError此时尚未初始化,更不用说分配了值。

执行行

后,您可以(并且应该)检查error的值
NSString *csvData = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

在此之前error没有有用价值。

答案 1 :(得分:0)

我发布它是希望它可以帮助面临同样问题的其他人。不确定它的确切原因,但我在一个带有 _block 的变量上遇到了它。删除 _block 解决了这个问题,也没有给出任何警告。不确定这里发生了什么,因为我在更新到 iOS 14 后遇到了它。如果我发现任何更有趣的东西,我会更新。