NSData *data;
data = [self fillInSomeStrangeBytes];
내 질문은 이제 파일에 가장 쉬운 방법으로이 data
을 쓰는 방법입니다.NSData를 파일에 작성하는 가장 쉬운 방법
는
NSData *data;
data = [self fillInSomeStrangeBytes];
내 질문은 이제 파일에 가장 쉬운 방법으로이 data
을 쓰는 방법입니다.NSData를 파일에 작성하는 가장 쉬운 방법
는
NSData
당신이 원하는 정확히 않는 writeToURL:atomically:
라는 방법이 있습니다 (I 이미 NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes
했습니다). 그것을 사용하는 방법을 보려면 the documentation for NSData
을보십시오.
writeToURL:atomically: 또는 writeToFile:atomically: 당신이 대신 URL의 파일 이름이있는 경우. 파일에 NSData
를 작성
+1에 대한 NSURL. NSURL은 파일을 가리킬 때 NSString을 pwn합니다. Apple은 항상 NSString이 아닌 파일 경로에 대해 NSURL을 권장합니다. :) –
writeToURL과 writeToFile의 차이점이 있다고 생각하지 않습니다. 문서에 따르면 "현재 전용 파일에서 이후 : // URL이 지원됩니다,이 방법 writeToFile 사이에는 차이가 없습니다 : 원자 :, 첫 번째 인수의 유형을 제외하고" –
는'NSData' 객체 문제의 원인을합니까 이 방법 은요? 나는이 URL에서'NSData' 객체로 다운로드 한 .sqlite 데이터베이스를 저장하고있어 (http://stackoverflow.com/questions/16150196/updating-sqlite-database-without-xml)이 질문에,하지만 올바르게 저장하지 않는 것 같습니다. 파일이 작성되었지만, 제 앱이나 타사 뷰어를 통해 액세스하려고하면 유효한 SQLite 데이터베이스가 아니라고 알려줍니다. 'writeToURL : atomically :'는'NSString' 또는 그와 비슷한 것을 저장하기 위해서만 작동합니까? – GeneralMike
공지 사항은 메인 스레드를 차단할 수있는 IO 작업입니다. 특히 데이터 객체가 큰 경우.
// 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];
});
검색하는 방법은 무엇입니까? –
[dataWithContentsOfFile''(https://developer.apple.com/documentation/foundation/nsdata/1547226-datawithcontentsoffile?language=objc) – Rob
을 또한 writeToFile:options:error:
또는 writeToURL:options:error:
이 경우 절약의에서 오류 코드를보고 할 수있는이 다음과 같이
따라서는 백그라운드 스레드에서이 작업을 수행하는 것이 좋습니다, 가장 쉬운 방법은 GCD를 사용하는 것 어떤 이유로 든 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;
}
은 엔디안 문제에 대해 조심. –
'NSData' 객체의 소스가이 메소드에 중요합니까? [이 질문에] (http://stackoverflow.com/questions/16150196/updating-sqlite-database-without-xml) URL에서'NSData' 개체로 다운로드 한 .sqlite 데이터베이스를 저장하고 있지만 올바르게 저장하지 않는 것 같습니다. 파일이 작성되었지만, 제 앱이나 타사 뷰어를 통해 액세스하려고하면 유효한 SQLite 데이터베이스가 아니라고 알려줍니다. 'writeToURL : atomically :'는'NSString' 또는 그와 비슷한 것을 저장하기 위해서만 작동합니까? – GeneralMike
'NSData'는 모든 종류의 이진 데이터 래퍼입니다. 원래 소스는 중요하지 않습니다. 귀하의 질문을보고,'NSWRLConnection' (또는'AFNetworking'과 같은 라이브러리)를 사용하여'initWithContentsOfURL :'을 통해 권하고 싶습니다. 작은 다운로드의 경우 NSData는 정상적으로 작동하지만 다운로드를 제어하지 못합니다. 문제가 발생하면 문제를 진단하기가 어렵습니다. – Alex