初始化NSString的长度限制

时间:2011-11-01 14:47:15

标签: ios nsstring

在下面的代码中,我正在寻找一种限制连接字符串长度的方法。假设我只想检索前100个字符。但我不想在检索后进行连接处理。有没有办法初始化一定长度的NSString?

NSError* error = nil;
NSString *connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.somesite.com"] encoding:NSASCIIStringEncoding error:&error];

2 个答案:

答案 0 :(得分:2)

您将不得不自己检索数据,而不是使用NSString的便捷方法来执行此操作。如果您使用NSURLConnection或ASIHTTPRequest,则可以在收到所需数据时关闭连接。

答案 1 :(得分:2)

您可以使用NSString方法检索前100个字符,但无论如何都会浪费带宽以获取所有数据。所以当你只需要100个字符时,为什么要下载所有内容。

因此,为了从服务器获取一小部分数据,您需要计算url响应给出的数据流。为此,您可以使用NSURLConnection -

- (void)viewDidLoad {
    [super viewDidLoad];

    responseData = [[NSMutableData data] retain];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://someurl.com/data.json"]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    if([responseData length] <= 100)
        [responseData appendData:data];
    else //break connection
        [self connectionDidFinishLoading:connection];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    label.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];
}

所以你需要将你的逻辑放在didReceiveData中。在这里,您只需要100个字符,因此在达到该数字后断开连接。