IOS/Objective-C/Core数据:在NSManaged对象数组中查找NSNumber的索引

IOS/Objective-C/Core数据:在NSManaged对象数组中查找NSNumber的索引,ios,core-data,indexof,Ios,Core Data,Indexof,我从NSM托管对象的核心数据执行提取。托管对象的属性之一是NSNumber,对应于对象的id(不是Apple的objectid,我自己的顺序NSNumber id方案)。对于id为#的给定对象,我希望获取数组中该对象的索引。但是,我无法找到获取id列表的方法,因为valueforkey不适用于nsnumbers,objectforkey对nsmutablearray抛出错误。有人能建议怎么做吗 这是我的非工作代码。问题是我无法从获取的对象中获取有效的ID列表 //FETCH ITEMS - (i

我从NSM托管对象的核心数据执行提取。托管对象的属性之一是NSNumber,对应于对象的id(不是Apple的objectid,我自己的顺序NSNumber id方案)。对于id为#的给定对象,我希望获取数组中该对象的索引。但是,我无法找到获取id列表的方法,因为valueforkey不适用于nsnumbers,objectforkey对nsmutablearray抛出错误。有人能建议怎么做吗

这是我的非工作代码。问题是我无法从获取的对象中获取有效的ID列表

//FETCH ITEMS
- (id) getItems{

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Items"];
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"lasttouched" ascending:NO];
    [fetchRequest setSortDescriptors:@[sort]];
    NSError *error      = nil;
    self.managedObjectContext = [IDModel sharedInstance].managedObjectContext;

    NSArray *results    = [self.managedObjectContext executeFetchRequest:fetchRequest
     NSMutableArray *mutableresults = [results mutableCopy];
    [mutableresults removeObjectIdenticalTo:[NSNull null]];
    NSArray*someids =[[mutableresults valueForKey:@"myid"] mutableCopy];
//THIS IS EMPTY WHEN LOGGED
    _someids = someids;//save to ivar
         return mutableresults; //an array of activity objects with all their properties
    }

    // In method to get index of the object

     NSInteger myIndex=[_someids indexOfObject:@33];
        NSLog(@"anIndex%ld",(long)anIndex);

您需要将对象重新映射到新数组中。直截了当地说,比如:

NSMutableArray *arrayOfIdentifiers = [[NSMutableArray alloc] init];
for(WhateverMyManagedObjectIs *item in results) { if(item.myid) [arrayOfIdentifiers addObject:item.myid]; }
这将导致ID数组仅作为
NSNumber
对象。由于
NSNumber
是一个对象,因此
indexOfObject
可能无法工作。原因是它将比较指针而不是值。因此,您需要使用
比较
方法,如:

NSInteger index = -1;
for(NSInteger i=0; i<_someids.count; i++) {
    if([_someids[i] compare:@33] == NSOrderedSame) {
        index = i; 
        break; // Break after first one is found
    }
}
NSInteger索引=-1;

对于(NSInteger i=0;i
NSArray*someid=[[mutableresults valueForKey:@“myid”]mutableCopy];对于(Items*anItemFetched in results){NSLog(@“ItemId:%@,[anItemFetched valueForKey:@“myid”}
这是否会打印您要查找的对象?为什么要检查
NSNull
实例?如果插入对象的代码编写得很仔细,则不能出现
NSNull
实例。
    NSInteger index = -1;
    for(NSInteger i=0; i<results.count; i++) {
        if([[results[i] myid] compare:@33] == NSOrderedSame) {
            index = i; 
            break; // Break after first one is found
        }
    }