NSPredicate и FilterArrayUsingPredicate: проблема предиката - PullRequest
0 голосов
/ 19 августа 2010
for (int i = 0; i < nCount1; i ++) {
        CGatewayMedia * media = (CGatewayMedia *)[GatewayDetail.mcMutableArray objectAtIndex:i];
        NSString * zStr1 = [[NSString alloc]initWithFormat:@"%d",media.mnSNO];
        NSString * zStr2 = [[NSString alloc]initWithFormat:@"%@",media.mcstrMOrgName];
        NSString * zStr3 = [[NSString alloc]initWithFormat:@"%@",media.mcstrUser];
        NSString * zStr4 = [[NSString alloc]initWithFormat:@"%@",media.mcstrFType];
        NSString * zStr5 = [[NSString alloc]initWithFormat:@"%@",media.mcstrFSize];
        NSString * zStr6 = [[NSString alloc]initWithFormat:@"%@",media.mcstrFDate];
        NSString * zStr7 = [[NSString alloc]initWithFormat:@"%d",media.mnMedID];
        NSString * zStr8 = [[NSString alloc]initWithFormat:@"%@",media.mcstrMedSysName];
        CGatewayData * zDataObject = [[CGatewayData alloc]initWithString1:zStr1 
                                                               andString2:zStr2 
                                                               andString3:zStr3
                                                               andString4:zStr4
                                                               andString5:zStr5
                                                               andString6:zStr6
                                                               andString7:zStr7
                                                               andString8:zStr8
                                      ];


        [mMedia.nsMutaryOfDataObject addObject:zDataObject];
    } 
    mMedia->mcMediaController->nsMutaryOfDataObject = nil;
    mMedia->mcMediaController->nsMutaryOfDataObject = [[NSMutableArray alloc]init];

NSPredicate *predicate = [NSPredicate
                              predicateWithFormat:@"(zDataObject.nsStrName4 == %@) OR (zDataObject.nsStrName4 == %@ )",@"MP3",@"WMA"];*/
    mMedia->mcMediaController->nsMutaryOfDataObject = (NSMutableArray*)[mMedia.nsMutaryOfDataObject filteredArrayUsingPredicate:predicate];

Я не получаю ожидаемого результата .. Я правильно использую prediacte и FilterArrayUsingPredicate?

1 Ответ

1 голос
/ 19 августа 2010

Прежде всего zStr строки протекают.Вы начинаете их с alloc] init...], поэтому они сохраняют счет +1.После добавления их в ваш объект CGatewayData вы должны освободить их.И, конечно же, ваш объект CGatewayData должен сохранять их до тех пор, пока они им нужны.То же самое с вашим zDataObject.Взгляните на Руководство по программированию управления памятью

Второе, никогда не используйте -> в Objective-C!Вы должны использовать свойства для этого!

Теперь к вашей проблеме.Вы должны быть уверены, что путь zDataObject.nsStrName4 существует.Означает объект, к которому обращается mMedia.nsMutaryOfDataObject в вашем коде.Должен иметь по крайней мере геттер с именем zDataObject, и я предполагаю, что он возвращает объект CGatewayData.Таким образом, объект CGatewayData должен иметь как минимум геттер с именем nsStrName4.Для получения дополнительной информации я настоятельно рекомендую прочитать Руководство по программированию кодирования значения ключа

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