実際、サイズが 35 MB にも及ぶ巨大なバイト配列を受け取っています。このバイト配列は、pdf ドキュメントのバイトです。これを tcp ソケット入力ストリームから受信しています。
私が使用しているコードは
+ (NSString *) recvToFile:(NSString *)_fileName: (long)_sz {
@try {
uint8_t t[_sz];
NSMutableData *data = nil;
NSMutableData *fileData = [[NSMutableData alloc] init];
long _pos = 0;
NSString *_fullPath = [Misc createTempFile:_fileName];
while (_sz > _pos) {
long _c = [m_sin read:t maxLength:_sz];
_pos += _c;
data = [NSData dataWithBytes:t length:_c];
if([Misc checkTempFileExists:_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];
NSLog(@"ATTR - %@",attr);
long long length = [[attr valueForKey:@"NSFileSize"] intValue];
if (length >= _sz)
return (_fullPath);
}
@catch (NSException * e) {
}
return (nil);
}
問題は、アプリがクラッシュして、最初の行で「EXC_BAD_ACCESS(code=2 address=0x2461ae4)」エラーが発生することです。
+(NSString *) recvToFile:(NSString *)_fileName: (long)_sz
uint8_t[800000]としてuint8_t配列のサイズを800000に明示的に宣言すると、その後、iOSシミュレーターでは機能しますが、iPadでは機能しません
助けてください。ありがとう