iOS 提交长文本时应用崩溃
iOS app crashing when submitting long text
我的应用是电子商务应用。当我从 iOS 添加新产品时,如果我用英语填写描述字段,它会 post 产品成功,但是当我尝试阿拉伯语并单击提交按钮后,它会与线程 1 崩溃:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 可以看到详情Here...
我发现问题出在这个方法上,所以 resultString 不接受长文本,现在我想让它接受长文本,当我使用 po malloc() 检查时,我得到了这个错误
AddressSanitizer:请求的分配大小 0x6110003a6500(调整对齐、红色区域等后为 0x6110003a7500)超过最大支持大小 0x10000000000(线程 T0)
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
__block NSString *resultString = nil;
__block BOOL finished = NO;
[editorView evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
}
} else {
NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
}
finished = YES;
}];
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;
}
我通过保留 resultString 来解决这个问题,如下面的代码所示,我不知道这是否是一个好的做法,但它目前有效。
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
__block NSString *resultString = nil;
__block BOOL finished = NO;
[editorView evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
[resultString retain];
}
} else {
NSLog(@"evaluateJavaScript error : %@ll", error.localizedDescription);
}
finished = YES;
}];
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;
我的应用是电子商务应用。当我从 iOS 添加新产品时,如果我用英语填写描述字段,它会 post 产品成功,但是当我尝试阿拉伯语并单击提交按钮后,它会与线程 1 崩溃:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 可以看到详情Here...
我发现问题出在这个方法上,所以 resultString 不接受长文本,现在我想让它接受长文本,当我使用 po malloc() 检查时,我得到了这个错误
AddressSanitizer:请求的分配大小 0x6110003a6500(调整对齐、红色区域等后为 0x6110003a7500)超过最大支持大小 0x10000000000(线程 T0)
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
__block NSString *resultString = nil;
__block BOOL finished = NO;
[editorView evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
}
} else {
NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
}
finished = YES;
}];
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;
}
我通过保留 resultString 来解决这个问题,如下面的代码所示,我不知道这是否是一个好的做法,但它目前有效。
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
__block NSString *resultString = nil;
__block BOOL finished = NO;
[editorView evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
[resultString retain];
}
} else {
NSLog(@"evaluateJavaScript error : %@ll", error.localizedDescription);
}
finished = YES;
}];
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;