Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在objective c中为NSArray上的keypath查询写入值_Ios_Objective C - Fatal编程技术网

Ios 如何在objective c中为NSArray上的keypath查询写入值

Ios 如何在objective c中为NSArray上的keypath查询写入值,ios,objective-c,Ios,Objective C,我想写一个函数,它需要一堆员工。作为回报,它应该给出工资总和超过阈值的所有员工的名单。数组首先需要按照员工加入日期的升序进行排序。类结构如下所示:- @interface Employee : NSObject @property NSString *name; @property EmployeeMetadata *empMetadata; @end @interface EmployeeMetadata : NSObject @property NSString *salary; @pro

我想写一个函数,它需要一堆员工。作为回报,它应该给出工资总和超过阈值的所有员工的名单。数组首先需要按照员工加入日期的升序进行排序。类结构如下所示:-

@interface Employee : NSObject
@property NSString *name;
@property EmployeeMetadata *empMetadata;
@end

@interface EmployeeMetadata : NSObject
@property NSString *salary;
@property NSDate *joiningDate;
@end
我以以下方式编写了代码:-

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                    initWithKey:[NSString stringWithFormat:@"empMetadata.joiningDate"]
                                    ascending:TRUE];
[employeeArr sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];


NSInteger actual;
NSInteger thresholdExceedIndex = -1;
for (Employee *item in employeeArr) {
    actual = actual + [item.empMetadata.salary integerValue];
    if(actual >= totalThresholdSalary) {
        thresholdExceedIndex = [employeeArr indexOfObject:item];
        break;
    }
}

// if exceeded delete employee in FIFO
if(thresholdExceedIndex != -1) {
    [self deleteEmployees:[employeeArr subarrayWithRange:NSMakeRange(0, (thresholdExceedIndex + 1))]]
}
我们能用更好的方式写吗


如何使用NSArray valueforkeypath查询实现此目的?

解释->为什么需要字典数组。

你的格式应该是这样的

(
    {
        "name" = "Balraj"
        "metaData" = "your Data" // Whatever data is as per you set by the class 'EmployeeMetadata'.
    },
    {
        "name" = "tinu"
        "metaData" = "mine Data" 
    }   
)
根据您的要求,您必须在同一索引中设置person
name
及其交叉映射
metadata
。所以你必须这样做

在这里的示例中,我只是以字符串作为解释,但在实际场景中,您没有保存元数据对象,以便可以进一步访问它们的交叉对象,如
Salary
joiningData

如何访问对象

假设:您已经按照上述结构成功保存了所有记录

因此,要获取数据,您必须执行以下操作:

EmployeeMetadata* balrajData = array[0]["metaData"]
NSDate *balrajDOJ = balrajData. joiningDate.
甚至可以使用for循环:

NSMuatableArray *arrMutDOJ = [NSMuatableArray new];

for (int i = 0; i< array.count; i++){
  EmployeeMetadata* metaData = array[0]["metaData"]
  NSDate *DOJ = balrajData.joiningDate
  arrMutDOJ.add(DOJ)
}
NSMuatableArray*arrMutDOJ=[NSMuatableArray new];
对于(int i=0;i

现在在
arrMutDOJ
中,您有了所有员工的DOJ,现在您可以按递增顺序对他们进行排序。(根据您的要求)。

它应该是字典数组。@the_dahiya_boy为什么它应该是字典数组?请输入您尝试编写的代码,并指出其中哪部分不起作用。您需要使用排序枚举器对对象进行排序,并将得到最终排序或筛选对象数组。我添加了我的方法。请建议一个更好的方法或任何我可以改进的地方