سؤال

الملاذ الأخير هذا لأنني لا أستطيع لحياة لي أن أعمل!

أقوم بتعيين تاريخ عندما يتم إغلاق تطبيقي (باستخدام ApplicationWillRight) في الإعدادات الافتراضية للمستخدم

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *timeClosed = [[NSDate alloc] init];
[defaults setObject: timeClosed forKey:@"svdTimeClosedApp"];

ثم عند إطلاق التطبيق ، أريد مقارنة هذه المرة باستخدام

NSDate *timeSaved = svdTimeClosedApp;
NSDate *timeNow = [[NSDate alloc] init];
double timeInterval = [timeSaved timeIntervalSinceDate:timeNow];
NSLog(@"time now = %@, time saved = %@, time diff = %@", timeNow, timeSaved, [NSString stringWithFormat:@"%d",timeInterval]);

حاولت إخراج هذا إلى نافذة السجل أتوقع رؤية سلسلة منسقة بشكل جيد حوالي 20 ثانية. المشكلة هي أنها تخرج مثل 2047868928!

أيه أفكار؟!

(إخراج نافذة السجل أدناه)

time now = 2009-12-19 20:54:02 +0000, time saved = 2009-12-19 20:48:29 +0000, time diff = 2047868928

شكرا على اي مساعدة!

هل كانت مفيدة؟

المحلول

هناك بعض القضايا. أولا ، في الخاص بك stringWithFormat: تريد استخدام ٪ g ، وليس ٪ d ، ٪ d لقيم عدد صحيح. أيضا ، يجب أن تفعل [timeNow timeIntervalSinceDate:timeSaved] ستمنحك مكالمتك الحالية قيمة سلبية.

نصائح أخرى

إليك الرمز الذي أستخدمه.

في تطبيقي ، عندما يقوم المستخدم بمزامنة بعض البيانات ، أقوم بتسجيل التاريخ/الوقت الحالي باستخدام هذا الرمز:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:[NSDate date] forKey:@"LastSyncDate"];
[prefs synchronize];

ثم ، إذا أردت أن أرى عدد الأيام التي كانت فيها منذ آخر مرة ، يمكنني استخدام هذا:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSDate* dateOfLastSync = [prefs objectForKey:@"LastSyncDate"];
if (dateOfLastSync != nil)
{
    NSDate *timeNow = [NSDate date];
    double SECONDS_TO_DAY = 60 * 60 * 24;
    int timeIntervalInDays = (int)([timeNow timeIntervalSinceDate:dateOfLastSync] / SECONDS_TO_DAY);
    NSLog(@"The last sync was %d days ago.", timeIntervalInDays);
}

أتمنى أن يساعدك هذا.

مايك

www.mikesknowngebase.com

أعتقد أن لديك timeInterval الحساب للخلف ، أليس كذلك؟ أعتقد أنك تريد أن تقول ذلك عكس.

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top