私はimapクライアントを作成しています。受信データの本文とヘッダーを解析したいがクラッシュする。私はそれがクラッシュする理由を理解できず、部分文字列が範囲外のエラーを出す。どうすれば修正できますか?Objective-cサブストリング範囲の例外
私だけの着信文字列は1、私はデータを解析し、「FETCH」の文字列が のように来て以来、* FETCHまたは*含まれているかどうかを確認したいが、私は(4,6)のisEqualToString範囲をチェックすることは十分だろうと思ったが、のdidnことFETCH仕事はありません。
- (NSString*) readLine
{
NSMutableData* data = [[NSMutableData alloc] init];
unsigned char c;
for (;;) {
recv(socket_, &c, sizeof(c), 0);
if (c == '\n') {
NSString* s = [[NSString alloc] initWithData: data
encoding: NSUTF8StringEncoding];
NSString *str = [s substringWithRange:NSMakeRange(4, 6)];
if([str isEqualToString:@"FETCH "]){
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:s];
[scanner scanUpToString:@"}" intoString:nil];
while(![scanner isAtEnd]) {
NSString *substring = nil;
[scanner scanString:@"}" intoString:nil];
if([scanner scanUpToString:@"*" intoString:&substring]) {
// If the space immediately followed the }, this will be skipped
[substrings addObject:substring];
}
[scanner scanUpToString:@"}" intoString:nil]; // Scan all characters before next }
}
NSString *email;
[emailList addObject:@"Select an Email"];
for(int i=0; i<substrings.count;i++){
email = [substrings objectAtIndex:i];
[emailList addObject:email]; // add emails in emailList
}
[substrings release];
}
if (nil != s) {
NSLog(@"%@",s);
}
[data release];
return [s autorelease];
}
else {
[data appendBytes: &c length: 1];
}
}
return nil;
}
出力は次のようになります。
* 1 FETCH (BODY[HEADER.FIELDS (FROM SUBJECT DATE)] {149}
2011-11-07 23:32:24.363 SwitchDeneme[327:bc03] Date: Mon, 07 Nov 2011 17:00:25 -0500 (EST)
2011-11-07 23:32:24.364 SwitchDeneme[327:bc03] From: "AOLWelcomeInfo" <[email protected]>
2011-11-07 23:32:24.365 SwitchDeneme[327:bc03] Subject: Welcome to Your New Email Account!
2011-11-07 23:32:24.367 SwitchDeneme[327:bc03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFString substringWithRange:]: Range or index out of bounds'
terminate called throwing an exceptionsharedlibrary apply-load-rules all
ありがとうございました –