2011-11-18 36 views
1

我有一个看起来像下面这样的通用方法:来电咨询型核心数据属性的

-(NSArray *) db_select: (NSString *) entity where: (NSString*) fieldKey equals: (NSString*) value withSortField: (NSString *) sortField withFetchLimits:(NSRange) fetchLimits{ 
// convert value to a number if it isn't a string 
if (value != nil && ![value isKindOfClass:[NSString class]]){ 
    if ([value isKindOfClass:[NSNumber class]]){ 
     value = [((NSNumber*)value) stringValue]; 
    } 
} 

// assemble 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:entity inManagedObjectContext:moContext]; 
if (fieldKey != nil){ 
    NSPredicate *predicate = [NSPredicate 
           predicateWithFormat:@"%K like %@", 
           fieldKey,value]; 
    [request setPredicate:predicate]; 
} 
[request setEntity:entity]; 
[request setFetchLimit:fetchLimits.length]; 
[request setFetchOffset:fetchLimits.location]; 

if (sortField != nil){ 
    NSSortDescriptor *sortDescriptor = nil; 
       if (/*TODO fieldKey refers to an NSString */YES){ 
         sortDescriptor = [[NSSortDescriptor alloc] initWithKey:[self extractSortField:sortField] ascending:[self isAscending:sortField] selector:@selector(localizedCaseInsensitiveCompare:)]; 
       } else { 
         sortDescriptor = [[NSSortDescriptor alloc] initWithKey:[self extractSortField:sortField] ascending:[self isAscending:sortField]]; 
       } 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 
} 

// make the request 
NSError *error; 
return [moContext executeFetchRequest:request error:&error]; 

}

,我想不是做localizedCaseInsensitiveCompare如果字段(又名fieldKey)不一个字符串。如何查询核心数据模式,并确定entity.fieldKey是字符串还是其他字符?

谢谢!

回答

1

您可以根据通过其的实体实例:

NSEntityDescription *desc = [myEntity entity]; 
NSAttributeDescription *attDesc = [[desc propertiesByName] valueForKey:@"myProperty"]; 
NSAttributeType *type = [attDesc attributeType]; 

从那里,一个简单的开关,将决定你正在处理。