Метод возвращает NSString как ноль - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть метод, который создает NSString и возвращает его правильно. Однако, если я вызываю тот же метод из отдельного потока, он возвращает nil, хотя мой NSString не равен nil в соответствии с return.

Я получаю request = nil в методе "getPhones".

«запрос на возврат» в «createSelectPhonesRequest» содержит допустимую строку.

"getXmlRow" фактически строит строку.

+ (void)getUserPhones:(User *)user
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [DataManager getPhones:user];

    [pool release];
}

+ (void)getPhones:(User*)user
{
    NSString *request = [XMLBuilder createSelectPhonesRequest:user.NickName];
    NSString *getAddressesResponce = [TrafficManager sendRequest:request];      
}


+(NSString*) createSelectPhonesRequest:(NSString*)nickName
{
    NSString *request;
    NSMutableArray *attributes;
    NSMutableArray *attributesValues;

    /*** root ***/
    attributes = [NSMutableArray new];
    attributesValues = [NSMutableArray new];

    //time
    [attributes addObject:xmlAt.time];
    [attributesValues addObject:[NSDate getXmlFormattedDateFromCurrentDate]];
    //action
    [attributes addObject:xmlAt.action];    
    [attributesValues addObject:xmlAV.selectPhones];


    request = [XMLBuilder getXmlRow:xmlEl.envelop 
                         attributes:attributes 
                   attributesValues:attributesValues 
                              value:nil 
                              close:YES];
    [attributes release];
    [attributesValues release];


    return request;
}


+(NSString*) getXmlRow:(NSString*)element 
               attributes:(NSMutableArray*)attributes 
         attributesValues:(NSMutableArray*)attributesValues 
                    value:(NSString*)value 
                    close:(BOOL)close

{
    //open tag
    NSString* xmlRow = @"<";    
    //tag
    xmlRow = [xmlRow stringByAppendingString:element];
    //attrivutes+values
    if (attributes && attributesValues)
        for (int i=0; i<[attributes count]; i++)
        {
            NSString *attribute = (NSString*) [attributes objectAtIndex:i];
            NSString *attributeValue = (NSString*) [attributesValues objectAtIndex:i];

            xmlRow = [xmlRow stringByAppendingString:@" "];
            xmlRow = [xmlRow stringByAppendingString:(attribute)];      
            xmlRow = [xmlRow stringByAppendingString:@"=\""];
            xmlRow = [xmlRow stringByAppendingString:attributeValue];       
            xmlRow = [xmlRow stringByAppendingString:@"\""];
        }
    //end tag
    xmlRow = [xmlRow stringByAppendingString:@">"];
    //value
    if (value != nil)
        xmlRow = [xmlRow stringByAppendingString:value];
    //close tag
    if (close)
        xmlRow = [xmlRow stringByAppendingString:[self closeElement:element]];
    return xmlRow;
}

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Я подозреваю, что вы не создали пул автоматического выпуска для потока. У каждого потока должен быть свой пул автоматического выпуска.

0 голосов
/ 21 ноября 2011

Я думаю, что вы должны правильно инициализировать строку, как,

NSString *myString = [NSString stringWithString:@"Hello"];
...