iOS NSMutableData *data = [[NSMutableData alloc] init]; 崩溃了。

3

我在一个函数中使用了以下代码:

NSMutableData *data = [[NSMutableData alloc] init];  

我正在多次调用此函数(例如100次)。因此,我的问题是最初约60次或更多次它正常工作,但之后它会给出“BAD_EXC_ACCESS”错误。

以下是该函数:

+ (NSString *) recvToFile:(NSString *)_fileName {

@try {
    int _sz = [self recvNumber:4];
    uint8_t t[_sz];
    NSMutableData *data = [[NSMutableData alloc] init];
    NSMutableData *fileData = [[NSMutableData alloc] init];
        long _pos = 0;
        NSString *_fullPath = _fileName;
        while (_sz > _pos) {
            long _c = [m_sin read:t maxLength:_sz];
            _pos += _c;
            data = [NSData dataWithBytes:t length:_c];
            if([Misc checkFileExists:_fileName]==nil)
                [[NSFileManager defaultManager] createFileAtPath:_fullPath contents:nil attributes:nil];
            [fileData appendData:data];
        }
    [fileData writeToFile:_fullPath atomically:YES];
    NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:_fullPath error:nil];

    long long length = [[attr valueForKey:@"NSFileSize"] intValue];
    if (length >= _sz)
        return (_fullPath);
}
@catch (NSException * e) {
}
return (nil);
}

每次接收到文件时,我都会调用此函数。我想从字节中保存文件。


1
我们需要更多的代码。单独这一行没有任何问题。 - Scott Berrevoets
我已经添加了我的函数的代码。 - Deepak
2个回答

0

不应在此处初始化数据:

NSMutableData *data = [[NSMutableData alloc] init];

只需将变量初始化为nil;

NSMutableData* data = nil;

这个变量的初始化是不必要的,因为你在下一步中将一个新对象分配给这个指针:data = [NSData dataWithBytes:t length:_c]; - Dave
尝试设置异常断点。在哪一行会发生异常? - Dave
在我的代码中,就在NSMutableData * data = nil;之后, 我使用了NSMutableData **fileData = [[NSMutableData alloc] init];。 然后,我对这一行执行了相同的操作,将其更改为 NSMutableData *fileData = nil; 然后它在NSString ** _fullPath = _fileName;处给我报错。 所以现在每次初始化都会出现相同的错误。 - Deepak
但是,Dave,当我注释掉了那个fileData的初始化时,为什么在NSString初始化时它还是给我同样的错误?而当我删除了这个NSString _fullpath的初始化时,它又在下一个初始化中再次出现错误。 - Deepak
无论如何,Dave,非常感谢你抽出宝贵的时间。 - Deepak
显示剩余5条评论

0

尝试像这样向NSMutableData添加数据

    [data appendBytes:t length:_c];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接