Odd behavior of NSItemReplacementDirectory
Odd behavior of NSItemReplacementDirectory
- Subject: Odd behavior of NSItemReplacementDirectory
- From: Jens Alfke <email@hidden>
- Date: Thu, 09 Feb 2012 12:38:13 -0800
The behavior of NSItemReplacementDirectory is contrary to the docs and sort of suboptimal. Am I missing something or are the docs just wrong?
(1) The docs say the ‘appropriateForURL’ parameter is "a directory inside of which you want to create a unique temporary directory”. However, that isn’t the actual behavior on either platform:
* On iOS 5, it’s created next to, not inside, the specified directory.
* On Mac OS 10.7, it’s created in the default per-user temporary directory (/private/var/folders/...)
(2) Despite the fact that this is called a “temporary” directory, the documented location (and actual location on iOS) implies that it won’t be automatically deleted later on if my app crashes or otherwise forgets to clean up. That kind of defeats the purpose of using a temp dir!
(3) When called multiple times with the same ‘appropriateForURL’ path, it doesn’t return the same directory, but creates a new directory every time. This is cluttering up my filesystem with lots of empty directories named e.g. "(A Document Being Saved By MyAppName 21)”.
Here’s the code I’m using to create the temp dir:
NSURL* parentURL = [NSURL fileURLWithPath: _path isDirectory: YES];
NSURL* tempDirURL = [[NSFileManager defaultManager]
URLForDirectory: NSItemReplacementDirectory
inDomain: NSUserDomainMask
appropriateForURL: parentURL
create: YES error: &error];
Behavior (3) is leading me to suspect that I’m supposed to delete the directory when I’m done with it. Is that true? Also, if I get a new directory every time, I presumably can assume that it’s always empty and so I don’t have to worry about generating a unique filename for my temp file. Can I rely on that?
(My use case, FYI, is very simple: I’m downloading a file via a NSURLConnection. I don’t want to put the file in its final location until it’s completely downloaded, to avoid having an incomplete file left over if something goes wrong. So I want a temporary path to place it at that won’t be visible to the user, and will eventually be deleted if the app leaves it behind, but is guaranteed to be on the same filesystem as the final location so I can move it cheaply when it’s done. Basically all I want is a Cocoa equivalent of the old FindFolder call that returns the per-volume temp directory.)
—Jens
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden