English 中文(简体)
核心数据属性类型调查
原标题:Inquire on type of Core Data attribute

I have a generic method that looks like the following:

-(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];

}

and I want to not do the localizedCaseInsensitiveCompare if the field (aka fieldKey) is not a String. How do I enquire of the core data schema and work out if the entity.fieldKey is a string or otherwise?

感谢!

最佳回答

您可以通过其实体进行:

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

从那以后,简单的开关将决定你处理的事项。

问题回答

暂无回答




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签