Какова максимальная длина NSString? Альтернатива NSString — iPhone

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *theXML = [[NSString alloc] initWithBytes: [myWebData mutableBytes] length:[myWebData length] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",theXML);    
    [self actualString:theXML 
            extractMyData:@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><GetCategoryResponse xmlns=\"http://tempuri.org/\"><GetCategoryResult>"
            endingString:@"</GetCategoryResult></GetCategoryResponse></soap:Body></soap:Envelope>" 
            emptyString:@"<Prop_Category />"];
    [theXML writeToFile:[self GetMyFilePath] atomically:YES encoding:NSStringEncodingConversionAllowLossy error:nil];
    [theXML release];
}

-(NSArray*)actualString:(NSString*)theXML extractMyData:(NSString*)prefixString endingString:(NSString*)suffixString emptyString:(NSString*)noDataFromXMLString{
    // now here I want to extract data from string
    // from theXML
}

-(NSString*)GetMyFilePath{
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentDirectory=[paths objectAtIndex:0];
    NSString *pathToUserCopyofplist=[documentDirectory stringByAppendingPathComponent:@"myWebServiceData.plist"];
    NSLog(@"%@",pathToUserCopyofplist);
    return pathToUserCopyofplist;
}

Я хочу сохранить ответ веб-службы asp.net в файле plist.

Но иногда, когда ответ может быть в огромном размере. В такой ситуации соединение получило данных более 50 000 байт. И когда я NSlogs NSString - он печатает (null).

В этом случае я не могу сохранить ответ веб-службы на файл.

Какое должно быть решение для этого? Есть ли альтернативный способ NSString? (для этой цели)


person Sagar R. Kothari    schedule 27.10.2009    source источник


Ответы (2)


Если вы хотите что-то сохранить, у вас уже есть байты: [myWebData mutableBytes]

person Alex Reynolds    schedule 27.10.2009
comment
Вы можете создать файл с байтами, изменяемый или неизменяемый. См. developer.apple.com/iphone/library/documentation/Cocoa/ для одного используемого метода. - person Alex Reynolds; 27.10.2009
comment
Вы можете сгенерировать байтовый эквивалент <soap:Header> и найти соответствующий диапазон байтов в изменяемом объекте данных. Затем вы можете заменить эти байты на NULL: doc/uid/20000173-BGBBIABA" rel="nofollow noreferrer">developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ - person Alex Reynolds; 27.10.2009
comment
Сэр, но вот тут я запутался. Какой бы веб-сервис ни ответил, я хочу удалить часть, указанную в вопросе. мой вопрос, это возможно с nsstring? Изменяемые данные предпочтительнее? как заменить его с помощью nsmutable данных? - person Sagar R. Kothari; 27.10.2009
comment
Здесь вы должны сделать некоторую работу самостоятельно. Попробуйте работать с меньшими подмножествами байтов, чтобы увидеть, есть ли в вашем приложении ограничения памяти, которые могут вызывать проблемы с преобразованием данных в строку. Поскольку вы знаете, какие байты вам нужно удалить (теги мыла), попробуйте пройтись по набору байтов и выполнить сопоставление с образцом, что может быть немного более эффективным. Или используйте другой синтаксический анализатор XML, чтобы удалить эти теги. У вас уже есть данные. - person Alex Reynolds; 27.10.2009
comment
Между прочим, создание строки размером 50 КБ не должно быть проблемой. Таким образом, шаг, на котором у вас есть байты и вы конвертируете их в строку UTF8, будет хорошим местом для начала поиска проблем. - person Alex Reynolds; 27.10.2009

Помните, это мобильное устройство. Память чрезвычайно ограничена, и когда вы говорите, что, возможно, захотите выделить более 500 000 байтов, это бросает мне красный флаг. Это будет проблемой для вас с этим дизайном.

Если размер файла превышает n, рассмотрите возможность использования алгоритма потоковой передачи или фрагмента. Может быть, ваш веб-сервис может разбивать ответ на части разумного (и известного максимального) размера и устройства и записывать их в файл по мере их получения?

person marcc    schedule 27.10.2009
comment
Извиняюсь. Но по ошибке я добавил еще один ноль. - person Sagar R. Kothari; 27.10.2009
comment
Ах. 50К становится лучше :) - person marcc; 27.10.2009
comment
Сэр, я обновил более подробную информацию. Что четко указывает, зачем мне нужны данные в формате nsstring. - person Sagar R. Kothari; 27.10.2009