2010-08-19 2 views
0
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 및 filteredArrayUsingPredicate를 올바르게 사용하고 있습니까?NSPredicate 및 filteredArrayUsingPredicate : 술어 문제

+0

mMedia-> mcMediaController-> nsMutaryOfDataObject = nil;을 읽어보십시오. */나 구토 * –

+0

깜짝? 사실 그것은 당신이 당신의 멤버 vars를 @public으로 선언 할 때 Objective-C에서 작동합니다. 왜냐하면 객체는 C 구조체로 처리되기 때문입니다. 하지만 그래, 당신은 절대 그렇게해서는 안됩니다 !!! – V1ru8

+0

@ V1ru8 예 나는 그것이 작동한다는 것을 알고 있지만 (당신이 말한대로) 절대로 그렇게해서는 안됩니다. –

답변

1

우선 zStr 문자열이 새고 있습니다. alloc] init...]으로 초기화하면 보유 수는 +1이됩니다. CGatewayData 객체에 추가 한 후에는 해당 객체를 해제해야합니다. 또한 CGatewayData 객체는 필요할 때까지 객체를 유지해야합니다. 너의 zDataObject도 마찬가지다. 살펴보기 Memory Management Programming Guide

두 번째로 절대 사용하지 마십시오 -> Objective-C! 당신은 그 속성을 사용해야합니다!

문제가 생겼습니다. 경로 zDataObject.nsStrName4이 있는지 확인해야합니다. 코드에서 mMedia.nsMutaryOfDataObject에 의해 액세스 된 객체를 나타냅니다. 최소한 zDataObject이라는 게터가 있어야하고 CGatewayData 개체를 반환한다고 가정합니다. 그래서 CGatewayData 객체는 최소한 nsStrName4이라는 getter를 가져야합니다. 자세한 내용을 보려면 Key-Value Coding Programming Guide