سؤال

NSData *data;
data = [self fillInSomeStrangeBytes];

وسؤالي هو الآن كيف أستطيع أن أكتب هذا data على أسهل طريقة لملف.

و(لقد بالفعل file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes NSURL)

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

المحلول

وNSData لديه طريقة تسمى writeToURL:atomically: التي لا بالضبط ما تريد القيام به. ابحث في وثائق NSData لمعرفة كيفية استخدامها.

نصائح أخرى

لاحظ أن الكتابة NSData في ملف هي عملية IO التي قد منع الترابط الرئيسي. خصوصا إذا كان الكائن البيانات كبيرة.

لذلك ينصح لتنفيذ هذا على خلفية موضوع، فإن أسهل طريقة هي استخدام GCD كما يلي:

// Use GCD's background queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    // Generate the file path
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.dat"];

     // Save it into file system
    [data writeToFile:dataPath atomically:YES];
});

<وأ href = "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/doc/uid/20000172-CIACAEJE" يختلط = "noreferrer"> writeToURL: بالذرة: أو <وأ href = "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/ وثيقة / رمز المستخدم / 20000172-CIAEAHFJ "يختلط =" noreferrer "> writeToFile: بالذرة: إذا كان لديك اسم ملف بدلا من URL

لديك أيضا writeToFile:options:error: أو <ل أ href = "https://developer.apple.com/documentation/foundation/nsdata/1410595-writetourl؟language=objc" يختلط = "نوفولو noreferrer"> writeToURL:options:error: حيث يمكن الإبلاغ عن رموز الخطأ في حالة إنقاذ ل فشل NSData لأي سبب من الأسباب. على سبيل المثال:

NSError *error;

NSURL *folder = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
if (!folder) {
    NSLog(@"%s: %@", __FUNCTION__, error);        // handle error however you would like
    return;
}

NSURL *fileURL = [folder URLByAppendingPathComponent:filename];
BOOL success = [data writeToURL:fileURL options:NSDataWritingAtomic error:&error];
if (!success) {
    NSLog(@"%s: %@", __FUNCTION__, error);        // handle error however you would like
    return;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top