在下面的代码中,我正在寻找一种限制连接字符串长度的方法。假设我只想检索前100个字符。但我不想在检索后进行连接处理。有没有办法初始化一定长度的NSString?
NSError* error = nil;
NSString *connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.somesite.com"] encoding:NSASCIIStringEncoding error:&error];
答案 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个字符,因此在达到该数字后断开连接。