سؤال

وماذا سيكون أفضل وسيلة لإرسال البيانات إلى ملف أو قاعدة بيانات تسجيل في تطبيق اي فون؟

ومن الناحية المثالية، يمكن إعادة توجيه NSLog () الإخراج إلى ملف باستخدام freopen ()، ولكن رأيت العديد من التقارير أنه لا يعمل. هل لديها هذه الجارية بالفعل أو يحصل على أي أفكار كيف يمكن القيام بذلك أفضل؟

وشكرا!

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

المحلول

freopen

ولقد استعملت بنجاح (...) على الهاتف لإعادة توجيه الإخراج إلى ملف بلدي.

نصائح أخرى

إذا كنت تريد استخدام الكاكاو، NSString وNSData ديك طرق القراءة / الكتابة إلى الملف ويعطي NSFileManager لك ملف العمليات. وهنا مثال (يجب أن تعمل على اي فون):

NSData *dataToWrite = [[NSString stringWithString:@"String to write"] dataUsingEncoding:NSUTF8StringEncoding];

NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"fileName.txt"];

// Write the file
[dataToWrite writeToFile:path atomically:YES];

// Read the file
NSString *stringFromFile = [[NSString alloc] initWithContentsOfFile:path];  

// Check if file exists
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager fileExistsAtPath:path]; // Returns a BOOL    

// Remove the file
[fileManager removeItemAtPath:path error:NULL];

// Cleanup
[stringFromFile release];
[fileManager release];

وهذا الرمز يعمل كبيرة بالنسبة لي ..

#if TARGET_IPHONE_SIMULATOR == 0
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif

وبعد ذلك يمكنك الحصول على ملف تسجيل الخروج اي فون باستخدام الطريقة الموضحة هنا <لأ href = "http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on -The-فون / # أكثر-85 "يختلط =" نوفولو noreferrer "> http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on-the-iphone/# أكثر 85

لاحظ أن استخدام freopen ستوقف CONSOLE في العمل كسكودي .. ولكن، لسبب وحدة يمكنك عرض في منظم كسكودي لا يزال يعمل كبيرة.

وهذا الرمز يعمل بالنسبة لي:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
#if TARGET_IPHONE_SIMULATOR == 0
    freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr);
#endif
}

الكاكاو الحطاب . انها خفيفة متعددة الأغراض ولكن مرنة لاستبدال وظيفة NSLog. في رأيي انها في نفس الفئة Log4J، والسماح لappenders مخصصة وما شابه ذلك. أنه يحتوي على مسجل سكليتي، على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top