Итак, я получил результат своего исследования. Сбой был вызван textView contentInset. Когда левая и правая вставки равны 0, это хорошо работает с большими текстами, и я предполагаю, что вычисление выравниваний, шрифтов и т. Д. TextView занимает довольно много времени, поэтому компилятор просто выдал ошибку.
Из документации:
Использованию NSCalendarDate сильно препятствуют. Это еще не удерживается от использования, однако это может быть в следующей главной версии ОС после Mac OS X v10.5. Для calendrical вычислений необходимо использовать подходящие комбинации NSCalendar, NSDate и NSDateComponents, как описано в Календарях в Датах и времени, Программируя Темы для Какао.
Следование тому совету:
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *tomorrow = [gregorian dateByAddingComponents:components toDate:today options:0];
[components release];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
components = [gregorian components:unitFlags fromDate:tomorrow];
components.hour = 0;
components.minute = 0;
NSDate *tomorrowMidnight = [gregorian dateFromComponents:components];
[gregorian release];
[components release];
(Я не уверен пренебрежительный, если это - наиболее эффективное внедрение, но оно должно служить указателем в правильном направлении.)
Примечание: В теории можно уменьшить объем кода здесь путем разрешения объекта компонентов даты со значениями, больше, чем диапазон нормальных значений для компонента (например, просто добавляя 1 к дневному компоненту, который мог бы привести к тому, что это имело значение 32). Однако, хотя dateFromComponents:
может терпеть за пределы значения, этому не гарантируют. Вы сильно поощряетесь не полагаться на него.
Преобразуйте свою текущую дату и время на дату Unix (секунды с 1970) или стиль DOS (с 1980), затем добавьте 24 часа и преобразуйте его назад. Затем сбросьте часы, минуты и секунды для обнуления для получения до полуночи.
Нет - это будет тот же способ, которым Вы используете для нахождения полуночи сегодня.
[NSDate dateWithNaturalLanguageString:@"midnight tomorrow"];
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:(24 * 60 * 60)];
NSDateComponents *components = [gregorian components:(NSYearCalendarUnit |
NSMonthCalendarUnit |
NSDayCalendarUnit)
fromDate:tomorrow];
NSDate *midnight = [gregorian dateFromComponents:components];