2013-09-20 3 views
0

У меня есть NSArray объектов, и данные выглядят так. В настоящее время я пытаюсь суммировать значение часов в свойстве timeSheets заданной задачи. У меня в настоящее время есть двойной цикл, который выполняет работу для iPhone, однако он сталкивается с проблемой производительности с задержкой в ​​UITableView в версии iPad. Код для цикла double for находится внизу. Я пытаюсь использовать смесь NSExpressions и NSPredicates, но я не могу заставить их правильно добавить.Попытка получить сумму свойства в массиве

 <Tasks: 0xc563950> (entity: Tasks; id: 0xc561940 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p8> ; data: { 
    assigneeID = 20; 
    budgetedHours = 5; 
    chargeNumber = 0; 
    completedProgress = 0; 
    createdBy = "Tyler Baetz"; 
    dateCreated = "2013-09-06 19:18:40 +0000"; 
    dateModified = "2013-09-11 04:53:32 +0000"; 
    descriptions = nil; 
    dueDate = "2013-09-11 07:00:00 +0000"; 
    modifiedBy = "Jose Alvarez"; 
    name = Denver; 
    ownerID = 120; 
    parentID = 1914; 
    project = "0xc566070 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Projects/p2>"; 
    projectID = 500910; 
    taskID = 1916; 
    taskPriority = nil; 
    taskPriorityID = 1; 
    taskStatus = nil; 
    taskStatusID = 3; 
    taskType = nil; 
    taskTypeID = 4; 
    tasks = "<relationship fault: 0xb4e9db0 'tasks'>"; 
    timeSheets =  (
     "0xc553780 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p12>", 
     "0xc5537a0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p14>", 
     "0xc5537b0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p15>" 
    ); 
}) with objects {(
    <TimeSheets: 0xc555420> (entity: TimeSheets; id: 0xc553780 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p12> ; data: { 
    approvedBy = nil; 
    comments = nil; 
    dateApproved = nil; 
    dateEntered = "2013-09-06 20:31:31 +0000"; 
    employee = nil; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 173; 
    reportPeriod = nil; 
    reportPeriodID = 4; 
    task = "0xc561940 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p8>"; 
    taskID = 1916; 
    timeSheetDate = "2013-09-01 07:00:00 +0000"; 
    timeSheetID = 1934; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc555730> (entity: TimeSheets; id: 0xc5537a0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p14> ; data: { 
    approvedBy = nil; 
    comments = "Friday :45"; 
    dateApproved = nil; 
    dateEntered = "2013-09-06 20:31:31 +0000"; 
    employee = nil; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 45; 
    reportPeriod = nil; 
    reportPeriodID = 4; 
    task = "0xc561940 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p8>"; 
    taskID = 1916; 
    timeSheetDate = "2013-09-06 07:00:00 +0000"; 
    timeSheetID = 1937; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc5557a0> (entity: TimeSheets; id: 0xc5537b0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p15> ; data: { 
    approvedBy = nil; 
    comments = "Hello Man"; 
    dateApproved = nil; 
    dateEntered = "2013-09-11 13:20:19 +0000"; 
    employee = nil; 
    employeeID = 20; 
    enteredBy = 50; 
    hours = 300; 
    reportPeriod = nil; 
    reportPeriodID = 4; 
    task = "0xc561940 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p8>"; 
    taskID = 1916; 
    timeSheetDate = "2013-09-05 07:00:00 +0000"; 
    timeSheetID = 2357; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}) 
)}, 
Relationship 'timeSheets' on managed object (0xc5639f0) <Tasks: 0xc5639f0> (entity: Tasks; id: 0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9> ; data: { 
    assigneeID = 20; 
    budgetedHours = 3; 
    chargeNumber = 0; 
    completedProgress = 0; 
    createdBy = "Tyler Baetz"; 
    dateCreated = "2013-09-06 19:17:01 +0000"; 
    dateModified = "2013-09-12 18:34:55 +0000"; 
    descriptions = nil; 
    dueDate = "2013-09-09 07:00:00 +0000"; 
    modifiedBy = "Jose Alvarez"; 
    name = "Jose's Task"; 
    ownerID = 120; 
    parentID = 1913; 
    project = "0xc566070 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Projects/p2>"; 
    projectID = 500910; 
    taskID = 1915; 
    taskPriority = nil; 
    taskPriorityID = 4; 
    taskStatus = nil; 
    taskStatusID = 3; 
    taskType = nil; 
    taskTypeID = 4; 
    tasks = "<relationship fault: 0xb4ee0d0 'tasks'>"; 
    timeSheets =  (
     "0xc5537c0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p16>", 
     "0xc553810 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p21>", 
     "0xc553800 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p20>", 
     "0xc553790 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p13>", 
     "0xc5537d0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p17>" 
    ); 
}) with objects {(
    <TimeSheets: 0xc5557f0> (entity: TimeSheets; id: 0xc5537c0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p16> ; data: { 
    approvedBy = nil; 
    comments = nil; 
    dateApproved = nil; 
    dateEntered = "2013-09-11 17:05:11 +0000"; 
    employee = "0xb4b8660 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Employees/p23>"; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 205; 
    reportPeriod = nil; 
    reportPeriodID = 5; 
    task = "0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9>"; 
    taskID = 1915; 
    timeSheetDate = "2013-09-11 17:05:18 +0000"; 
    timeSheetID = 2633; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc5559b0> (entity: TimeSheets; id: 0xc553810 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p21> ; data: { 
    approvedBy = nil; 
    comments = Rarer; 
    dateApproved = nil; 
    dateEntered = "2013-09-17 22:05:11 +0000"; 
    employee = "0xb4b8660 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Employees/p23>"; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 0; 
    reportPeriod = nil; 
    reportPeriodID = 6; 
    task = "0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9>"; 
    taskID = 1915; 
    timeSheetDate = "2013-09-19 07:00:00 +0000"; 
    timeSheetID = 3297; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc555950> (entity: TimeSheets; id: 0xc553800 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p20> ; data: { 
    approvedBy = nil; 
    comments = Cbfb; 
    dateApproved = nil; 
    dateEntered = "2013-09-17 22:33:05 +0000"; 
    employee = "0xb4b8660 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Employees/p23>"; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 0; 
    reportPeriod = nil; 
    reportPeriodID = 6; 
    task = "0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9>"; 
    taskID = 1915; 
    timeSheetDate = "2013-09-16 07:00:00 +0000"; 
    timeSheetID = 3298; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc5556c0> (entity: TimeSheets; id: 0xc553790 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p13> ; data: { 
    approvedBy = nil; 
    comments = nil; 
    dateApproved = nil; 
    dateEntered = "2013-09-12 18:34:55 +0000"; 
    employee = "0xb4b8660 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Employees/p23>"; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 284; 
    reportPeriod = nil; 
    reportPeriodID = 5; 
    task = "0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9>"; 
    taskID = 1915; 
    timeSheetDate = "2013-09-12 18:21:59 +0000"; 
    timeSheetID = 2827; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}), 
    <TimeSheets: 0xc555850> (entity: TimeSheets; id: 0xc5537d0 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/TimeSheets/p17> ; data: { 
    approvedBy = nil; 
    comments = Asdad; 
    dateApproved = nil; 
    dateEntered = "2013-09-17 22:03:32 +0000"; 
    employee = "0xb4b8660 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Employees/p23>"; 
    employeeID = 20; 
    enteredBy = 20; 
    hours = 0; 
    reportPeriod = nil; 
    reportPeriodID = 6; 
    task = "0xc561950 <x-coredata://36042CA3-F392-46FB-AF23-F0C396CE0989/Tasks/p9>"; 
    taskID = 1915; 
    timeSheetDate = "2013-09-15 07:00:00 +0000"; 
    timeSheetID = 3296; 
    timeStatus = nil; 
    timeStatusID = 1; 
    timeType = nil; 
    timeTypeID = 35; 
}) 
)} 
) 

Код для Double For Loop:

- (NSNumber *) getSumOfChargedHoursForAnArrayOfTasks: (NSArray *) tasksArray 
{ 
    NSArray *timeSheets = [tasksArray valueForKeyPath:@"timeSheets"]; 

    NSNumber *chargedHours = [NSNumber numberWithInt:0]; 

    for(int i = 0; i < [timeSheets count]; ++i) 
    { 
     NSArray *innerTimeSheet = [timeSheets objectAtIndex:i]; 

     for(int j = 0; j < [innerTimeSheet count]; ++j) 
     { 
      NSNumber *innerNumber = [innerTimeSheet valueForKeyPath:@"@sum.hours"]; 

      chargedHours = [NSNumber numberWithFloat:[chargedHours intValue] + [innerNumber intValue]]; 
     } 

    } 

    return chargedHours; 
} 
+0

Я также попытался исправить значениеForKeyPath: @ "timesheet.hours" в цикле double for, но это просто возвращает число часов с типом id. Я попытался добавить их, чтобы добавить их, но я столкнулся с другой ошибкой. –

+0

Какова цель внутреннего цикла? –

+0

Подумайте об этом как totalHours + = расписание.часов. потому что массив timesheets - это массив массивов. –

ответ

2

Если вы пытаетесь подвести часы во всех табелях в массиве задач, то вы должны рассмотреть возможность использования valueForKeyPath: следующим образом:

[tasks valueForKeyPath:@"@[email protected]"] 

Похоже, что теперь, вы умножив сумму часов в timeSheets для каждой задачи по количеству времени листов для каждой задачи.

+0

Огромное спасибо, что я пытался @ "timeSheets. @ Sum.hours" Я не знал, что вам нужен другой на сумму, а также спасибо –

Смежные вопросы