NSScanner: nil string argument错误定位

 报错:

NSScanner: nil string argument

libc++abi.dylib: terminate_handler unexpectedly threw an exception

尝试以下方式定位错误

@try {


//可能出错的代码

//或

//main文件中的

//@autoreleasepool {

 //       return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

 //}


   }

    @catch (NSException *exception) {        

NSLog(@"%@",exception);

   }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,我的回答不够准确,我理解为每个逗号都是正常的分隔符。对于你提出的情况,CSV 文件中的每行可能包含带有逗号的字段,这时候需要使用特殊的方法来处理这些字段。通常的做法是在包含逗号的字段两侧加上引号,表示该字段是一个整体。 下面是一个可以处理带有逗号的字段的示例代码,该代码使用 NSString 的 `stringByTrimmingCharactersInSet:` 方法来去除字段两侧的引号,使用 `stringByReplacingOccurrencesOfString:withString:` 方法将两侧的双引号替换为单引号,最后使用 `componentsSeparatedByString:` 方法将一行数据按逗号分割成一个数组: ```objc NSString *csv = @"name,age,email\nJohn,25,\"john@example.com, USA\"\nJane,30,jane@example.com"; NSArray *lines = [csv componentsSeparatedByString:@"\n"]; NSString *firstLine = [lines firstObject]; NSArray *fields = [firstLine componentsSeparatedByString:@","]; NSString *secondField = [fields objectAtIndex:1]; NSString *thirdField = [fields objectAtIndex:2]; for (NSInteger i = 1; i < [lines count]; i++) { NSString *line = [lines objectAtIndex:i]; NSArray *values = [self parseCSVLine:line]; NSLog(@"%@", [values objectAtIndex:2]); // 输出:john@example.com, USA } // 解析带有逗号的 CSV 行 - (NSArray *)parseCSVLine:(NSString *)line { NSMutableArray *values = [NSMutableArray array]; NSScanner *scanner = [NSScanner scannerWithString:line]; scanner.charactersToBeSkipped = nil; NSString *field = nil; while (![scanner isAtEnd]) { if ([scanner scanString:@"\"" intoString:NULL]) { [scanner scanUpToString:@"\"" intoString:&field]; [scanner scanString:@"\"" intoString:NULL]; field = [field stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\""]]; field = [field stringByReplacingOccurrencesOfString:@"\"" withString:@"'"]; } else { [scanner scanUpToString:@"," intoString:&field]; } [values addObject:field]; if (![scanner isAtEnd]) { [scanner scanString:@"," intoString:NULL]; } } return values; } ``` 在上面的代码中,首先使用 `componentsSeparatedByString:` 方法将 CSV 文件按行分割,然后获取第一行的内容。接着使用 `componentsSeparatedByString:` 方法将第一行按逗号分割,获取第二个和第三个字段的内容。然后遍历 CSV 文件中的每一行数据,使用 `parseCSVLine:` 方法将一行数据解析成一个数组。在 `parseCSVLine:` 方法中,首先使用 NSScanner 类来扫描一行数据,如果遇到双引号,则表示该字段包含逗号,需要特殊处理。如果没有遇到双引号,则直接使用逗号进行分割。最后将每个字段添加到一个 NSMutableArray 中,并返回该数组作为结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值