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 protected])

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to