Я решил свою проблему, и вот как я ее решил.
Прежде чем я получу свой ответ, я все еще новичок в Objective-C и объектно-ориентированном программировании, поэтому мой словарь незнаю, как описать некоторые вещи, которые я пытался объяснить.Поэтому примите это во внимание при чтении этого.
Использование UIDatePicker в режиме времени, то есть вы заходите в свой файл NIB / XIB и устанавливаете для своего объекта UIDatePicker значение «время», будет возвращаться только время.Вот где я ошибся.
Использование NSDateComponent или любого из методов NSCalendar выведет компонент даты средства выбора.Таким образом, вы увидите 1 января 1970 года, например, в результатах NSLog.
Мне нужно было найти новый способ сделать свою математику и манипулировать временем, которое я получал от сборщика.
В итоге я использовал NSTimeInterval, dateByAddingTimeInterval и timeIntervalSinceDate.Исследование показало, что NSTimeInterval также является типом с плавающей точкой, поэтому я использовал float для некоторой математики.
Вот пример -
if (indexPath.row == [labelArray indexOfObjectIdenticalTo:@"Clock Out"])
{
NSTimeInterval diffClockInOutToLunch = [outToLunch timeIntervalSinceDate:clockIn];
float remainingInTheDay = 28800 - diffClockInOutToLunch;
self.clockOut = [inFromLunch dateByAddingTimeInterval:remainingInTheDay];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:clockOut];
self.clockOutIndex = indexPath;
return cell;
}
Я использую TableView для отображения моих полей,Когда этот оператор 'if' сработает, он заполнит detailTextLabel строки, отображающей "Clock Out".Визуально фраза «Clock Out» будет находиться с левой стороны строки, а время - с правой стороны.
diffClockInOutToLunch определен как тип NSTimeInterval.Выполняемая операция - это timeIntervalSinceDate, которая по существу вычитает значение outToLunch из значения clockIn.Представьте, что OutToLunch - это 11:00 вечера, а часы - как 6:00 утра.Эта разница составляет 5 часов.NSTimeInterval сохраняет значения только в секундах, поэтому эта разница в 5 часов составляет 18000 секунд.
Затем я выполняю обычную математическую операцию с использованием float.В этом случае я хочу узнать, сколько часов осталось в рабочем дне.Это предполагает, что часы, отработанные в течение дня, составляют 8 часов.Поскольку NSTimeInterval возвращает секунды, я конвертировал 8 часов в секунды (28 800 секунд), а затем вычитал diffClockInOutToLunch из 28800. Теперь оставшийсяInTheDay равен 10800 или 3 часам.
Следующая выполняемая мной операция устанавливает для ClockOut значениевремя наш рабочий день закончен.Для этого я использую операцию dateByAddingTimeInterval, которая также является методом NSDate, поэтому все, что она возвращает, будет в формате даты / времени.В этой операции мы добавляем остаток inTheDay (10 800 секунд) к inFromLunch (например, в 11:30).Наше время clockOut теперь 14:30, которое затем отправляется через мой DateFormatter и возвращается в виде строки в ячейку TableView, а также сохраняется для дальнейшего использования.
Вот еще один пример, приведенный ниже в моем коде -
- (void)clockInChanged
{
// Set clockIn value
self.clockIn = self.pickerView.date;
// Change the outToLunch time
self.outToLunch = [self.pickerView.date dateByAddingTimeInterval:5*60*60];
UITableViewCell *outToLunchCell = [self.tableView cellForRowAtIndexPath:outToLunchIndex];
outToLunchCell.detailTextLabel.text = [self.dateFormatter stringFromDate:outToLunch];
// Change the inFromLunch time
self.inFromLunch = [outToLunch dateByAddingTimeInterval:30*60];
UITableViewCell *inFromLunchCell = [self.tableView cellForRowAtIndexPath:inFromLunchIndex];
inFromLunchCell.detailTextLabel.text = [self.dateFormatter stringFromDate:inFromLunch];
// Change the clockOut time
NSTimeInterval diffClockInOutToLunch = [outToLunch timeIntervalSinceDate:clockIn];
float remainingInTheDay = 28800 - diffClockInOutToLunch;
self.clockOut = [inFromLunch dateByAddingTimeInterval:remainingInTheDay];
UITableViewCell *clockOutCell = [self.tableView cellForRowAtIndexPath:clockOutIndex];
clockOutCell.detailTextLabel.text = [self.dateFormatter stringFromDate:clockOut];
}
В этом примере мы ранее определили, что была выбрана строка, относящаяся ко времени "Clock In" (если хотите, "Touch Up Inside"), и мы перейдем к этому методу.
В этом методе происходит то, что всякий раз, когда clockIn изменяется с помощью средства выбора, время, отображаемое в outToLunch, inFromLunch и clockOut, автоматически обновляется и отображается.
Этот пример показывает, что мы фиксируем значение в средстве выбора(self.pickerView.date) как clockIn.Затем мы используем clockIn, чтобы заполнить наш беспорядок dateByAddingTimeInterval и т. Д.
Итак.Вот как я управлял своим временем, используя UIDatePicker (который установлен в режиме времени).
Короткий ответ: я использовал неправильные методы для работы с тем, что поворачивал мой сборщик.
Надеюсь, это поможет вам, и, надеюсь, оно будет здесь, если оно мне снова понадобится;)