0

可能重复:
NSMutableData 消失

当我在我的程序中有一个 NSMutableData 变量时,它总是在它有 90810 字节时转储它的内容。数据中的字节数是否会导致数据丢失?这是代码。

- (void)fetchEntries
{
        // Construct a URL that will ask the service for what you want 
    NSURL *url = [NSURL URLWithString: @"http://www.nhara.org/scored_races-2013.htm"];//

    // Put that URL into an NSURLRequest
    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    // Create a connection that will exchange this request for data from the URL 
    connection = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
}

- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data 
{
    // Add the incoming chunk of data to the container we are keeping 
    // The data always comes in the correct order 
     [xmlData appendData:data];


    NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]autorelease];
    NSLog(@"xmlCheck = %@", xmlCheck);

}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"error= %@",error);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)conn {

    // We are just checking to make sure we are getting the XML 
    NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease];
    NSLog(@"xmlCheck2 = %@", xmlCheck);
}

这是它被切断的地方,但它改变了

<td style="font-size: 12.0pt; color: black; font-weight: 400; text-decoration: none; text-underline-style: none; font-family: Arial Narrow; font-style: normal; text-align: general; vertical-align: bottom; white-space: nowrap; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; border-bottom: 1.0pt solid windowtext; padding-left: 1px; padding-right: 1px; padding-top: 1px; background: #EAF1DD">
    King Pine</td>
    <td style="font-size: 12.0pt; color: black; font-weight: 400; text-decoration: none; text-underline-style: none; font-family: Arial Narrow; text-align: right; font-style: normal; vertical-align: bottom; white-space: nowrap; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; bor
2012-12-07 19:35:48.652 race tracker[2357:c07] xmlCheck = (null)
2012-12-07 19:43:28.914 race tracker[2357:c07] xmlCheck2 = (null)
2012-12-07 19:43:28.921 race tracker[2357:c07] (
)

我试图理解为什么我的 NSMutableData 不起作用,因此对 NSMutableData 的解释会有所帮助。

4

1 回答 1

1

NSMutableData将增长到任意大小。

运行curl http://www.nhara.org/scored_races-2013.htm > file.txt后,我可以告诉你服务器返回的文件长度正好是 90810 字节。所以这就是为什么你得到那个字节数的原因。填充的不是可变数据对象,而是 90810 正是正确的长度。

你的问题在这里:

[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]

您的服务器返回的字符串不是有效的 UTF-8。要自己验证这一点,请尝试NSASCIIStringEncoding(这是一种所有字节都有效的编码)。你会看到你正确地累积了一个字符串。

搜索返回的文件后,具体问题是位置 74,963 的字节——用于印刷单引号的 0x92。看起来像你想要NSWindowsCP1252StringEncoding的。上传该 HTML 的人似乎使用了 Microsoft 的代码页 1252。

于 2012-12-08T02:23:22.097 回答