Инициализация ограничения длины NSString - PullRequest
1 голос
/ 01 ноября 2011

В приведенном ниже коде я ищу способ ограничения длины соединяемой строки.Допустим, я хочу получить только первые 100 символов.Но я не хочу делать обработку, связанную после извлечения.Есть ли способ инициализировать NSString определенной длины?

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

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Вы можете использовать методы 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 символов, поэтому разорвите соединение после того, как этот номер будет достигнут.

2 голосов
/ 01 ноября 2011

Вам придется самостоятельно получать данные, а не использовать удобный метод NSString для этого. Если вы используете, скажем, NSURLConnection или ASIHTTPRequest, вы можете закрыть соединение, когда вы получили столько данных, сколько хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...