나는 CoreData에 의해 관리되는 객체의 목록을 가지고있다. CoreData에서 NSPredicate를 사용하여 특정 객체를 가져 오려고합니다. 아래 코드는 제가 사용하고있는 코드입니다. 배열 arr은 항상 그 안에 0 개의 객체가 있기 때문에 가져 오기가 술어와 일치하는 객체를 찾을 수 없기 때문일 수 있습니다. CoreData의 적어도 하나의 객체에 adUdid와 일치하는 advertisement.uuid가 있다는 사실을 알고 있습니다. 나는 수동으로 객체의 전체 목록을 가져 와서 그것을 스스로 검색하여 그것을 발견했다. advertisement는 WebServiceAuthService_mobileAdvertisementVO의 멤버이고 uuid는 광고의 멤버입니다. 더 정확히 말하자면,이 정확한 코드는 다른 프로젝트에서 잘 작동한다는 사실입니다. 이 코드가 새 프로젝트에서 더 이상 작동하지 않는 이유를 알아 내려고 실망했습니다.왜이 NSPredicate는 작동하지 않습니까?
이 코드는 내가 만든 정적 라이브러리에 중요합니다.
편집 : arr은 항상 비어 있으므로 게시 할 것이 없습니다. 또한 오류가 없습니다. 그저 작동하지 않습니다. uuids는 "9ca98efe-ef48-47c0-aff5-058224b3093d"줄을 따라 NSStrings입니다. 문제는 코드의 다른 부분에있을 수 있으며 여기에 그 자체가 나타납니다.
WebServiceAuthService_mobileAdvertisementVO *mobileAd = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"advertisement.uuid == %@",adUdid];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *arr = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
if (error)
{
DLog(@"fetched special ad error: %@",[error localizedDescription]);
}
if (arr && [arr count] >= 1)
{
DLog(@"found ad with UUID %@",adUdid);
for (WebServiceAuthService_mobileAdvertisementVO *obj in arr)
{
NSManagedObjectID *objID = [obj objectID];
if (![objID isTemporaryID])
{
mobileAd = obj;
}
}
}
당신은 아마도 가게에서 그 실체의 일부 개체가는이 조건없이 요구를 가져 오기 실행 시도? 또한, 'adUdid'는 어디에서 왔습니까? 그것은 아닌가요? –
Daniel adUdid가이 함수에 전달되었다는 것에 대해 유감스럽게 생각합니다. 프리디 케이트를 꺼낸 후 질문에 대답하기 위해 가져 오기가 6 개의 객체를 반환합니다. – iHorse
흠, 나는 그것이 내 코드의 UUID와 대조하기 위해 사용하는 것처럼 ==의 문제라고 생각하지 않습니다. 질문에 오류 출력을 추가 할 수 있습니까? (있는 경우) 또는 'arr'출력 만 추가 할 수 있습니다. 마지막으로 광고의 예제를 제공 할 수 있습니다 .uuid, 값 및 클래스, (우리는 그것이 NSString *이라고 추정하고 있습니다). –