2010-11-05 2 views

ответ

22

EDSunriseSet - открытая и бесплатная обтекатель Objective-C для программ на языках C, созданных Paul Schlyter.

Расчет производится полностью подпрограммами С-кода. EDSunrisetSet ликвидирует эти расчеты с классами общего какао (NSDate, NSTimeZone, ...)

+1

Это работает для меня. Недавно (январь 2013 года) был обновлен для некоторых ошибок памяти, поэтому, если вы используете его, убедитесь, что вы получили последний код. – mpemburn

6

Я использовал библиотеку под названием SUNWAIT. Очень простой, эффективный - простой в использовании!

+0

Вы использовали это с Objective-C/для iOS? Кроме того, есть ли какие-либо учебные пособия? – Moshe

+0

Нет - просто прямо C. Вы можете скомпилировать его как стандартный файл «C» и просто вызвать его. (Это то, что я сделал в своем приложении, но это не приложение для iPhone). – Brad

+0

Brad - Должен ли я скомпилировать его отдельно или включить его в свой проект и использовать вызовы API? – Moshe

8

Я фактически портировал KosherJava Library и планирую сделать его доступным в ближайшее время на GitHub!

Edit:

KosherCocoa теперь живут на GitHub! Если вам не нужен код, связанный с календарем на иврите, вы можете удалить файл «календарь». Файлы классов прекрасно разделяются на папки, основываясь на тех вычислениях, которые они выполняют.

Редактировать: KosherCocoa мы должны заменить на современное и более полное обновление, как только смогу. Вышеупомянутая ссылка теперь указывает на прежнее репо.

+0

ссылка выше на KosherCocoa мертва, но, похоже, парочка копий еще находится в github. https://github.com/search?q=koshercocoa – Cruinh

+0

Упс, я исправлю это в ближайшее время! – Moshe

+1

@Cruinh - Я действительно нахожусь в процессе модернизации исходных кодов и написания модульных тестов. – Moshe

1

Просто примечание .. если вы используете Berkley один ... ну не работает (в Австралии как минимум). Он действительно содержит код Paul Schlyter C, хотя это здорово.

Если вы хотите, чтобы он работал в любом месте, лучше всего рассчитать даты в UTC.

В SunriseAndSunset.m заменить код двойной подъем; двойной набор; следующим образом:

sun_rise_set(theYear, theMonth, theDay, lon, lat, &rise, &set); 
int hours = HOURS(rise); 
int mins = MINUTES(rise); 
int sethrs = HOURS(set); 
int setmins = MINUTES(set); 

NSTimeInterval riseOffset = ((hours * 60) + mins) * 60; 
NSTimeInterval setOffset = ((sethrs * 60) + setmins) * 60; 

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSString *dateStr = [NSString stringWithFormat:@"%i-%02d-%02dT00:00:00+0000", theYear, theMonth, theDay]; 
NSDate *utcMidnight = [formatter dateFromString:dateStr]; 

NSDate *utcSunrise = [utcMidnight dateByAddingTimeInterval:riseOffset]; 
NSDate *utcSunset = [utcMidnight dateByAddingTimeInterval:setOffset]; 

[formatter release]; 
[gregorian release]; 

return [NSDictionary dictionaryWithObjectsAndKeys:utcSunrise, @"sunrise", utcSunset, @"sunset", nil]; 
+0

Возможно, он не работает в Австралии, потому что вам дана дата в часовой пояс GMT. Уверен, что у вас было '+ 0000' вместо' + 1000' в NSDate, когда вы отлаживались. В следующий раз используйте '[date descriptionInLocale: [NSLocale currentLocale]]' для отладки дат. :-) –

+0

Трудно вспомнить, что далеко, но я уверен, что это не так, это больше связано с предположениями в коде и не тестированием на выбросы. Но в любом случае, вышеизложенное работает красиво, и их пример спас меня некоторое время. Так что это хорошо! :) – DavidAWalsh

+0

А не беспокойтесь :-) Я использую его в Австралии, поэтому надеюсь, что они исправили ошибки. Кажется, это работает после почти недели тестирования. –

4

Попробуйте это: https://github.com/mourner/suncalc/

Очень ясно и легко реализовать, хотя прописан на Javascript, но это легко преобразовать его в
Objective-C

Он также поддержка для расчета солнца, положения луны и координат.

2

После того, как вы не нашли простую альтернативу Swift, я создал Solar: Быстрое построение микро-библиотеки для восхода и захода солнца.