Супер просто и работает, но не уверен почему ....
angular.module('testing')
.directive('details', function () {
return {
templateUrl: 'components/details.template.html',
restrict: 'E',
controller: function ($scope) {
$scope.details=$scope.details; <=== can see the parent details doing this
}
};
});
Вы должны использовать следующее:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:yourDateHere];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];
Нет никакой разницы между NSDate * now и NSDate * now, это просто вопрос предпочтений. С точки зрения компилятора ничего не меняется.
Кроме того, я заметил в разных местах и в разное время звездочку (
*
) располагается либо сразу после времениNSDate * now
, либо прямо перед переменнойNSDate * now
. В чем разница между ними и почему вы должны использовать один по сравнению с другим?
Компилятору все равно, но размещение звездочки перед пробелом может ввести в заблуждение. Вот мой пример:
int* a, b;
Что такое тип b
?
Если вы угадали int *
, вы ошибаетесь. Это просто int
.
Другой способ делает это немного яснее, сохраняя * рядом с переменной, которой он принадлежит:
int *a, b;
Конечно, есть два способа, которые еще более ясны:
int b, *a;
int *a;
int b;
Вам нужно сделать что-то вроде следующего:
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:now];
NSLog(@"%d", [components hour]);
И так далее.
NSDate * now
и NSDate * now
- это одно и то же: указатель на объект NSDate.
Вы, вероятно, захотите использовать descriptionWithCalendarFormat : timeZone: locale: , а не dateWithCalendarFormat: - последний возвращает NSCalendarDate, который, как говорится в документах, в какой-то момент будет устарел.
Вы также можете использовать:
CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02.0f", currentDate.hour, currentDate.minute, currentDate.second];
CFRelease(currentDate); // Don't forget this! VERY important
Я думаю, это имеет следующие преимущества:
Другой способ:
NSDate *now = [NSDate date];
//maybe not 100% approved, but it works in English. You could localize if necessary
NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"];
//num of seconds between mid and now
NSTimeInterval timeInt = [midnight timeIntervalSinceDate:now];
int hours = (int) timeInt/3600;
int minutes = ((int) timeInt % 3600) / 60;
int seconds = (int) timeInt % 60;
Вы теряете субсекундную точность из-за преобразования NSTimeInterval в int, но это не имеет значения.
Нет разницы в расположении звездочки (в C, на котором основан Obj-C, не имеет значения). Это чисто предпочтение (стиль).
Мне потребовалось некоторое время, чтобы определить, почему пример приложения работает, а мое - нет.
Библиотека (Foundation.Framework), на которую ссылается автор, является системной библиотекой (из ОС ), где iphone sdk (я использую 3.0) больше не поддерживается.
Поэтому пример приложения (с about.com, http://www.appsamuck.com/day1.html ) работает, а наш - нет.
Замените это:
NSDate* now = [NSDate date];
int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];
На это:
NSDate* now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];
CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%2.0f", currentDate.hour, currentDate.minute, currentDate.second];
Марк был прав этот код НАМНОГО эффективнее для управления датами часов мин и сек. Но он забыл @ в начале объявления строки форматирования.