objective c - How to get a list of files in the directory os x? -
i'm developing application in objective-c. user selects directory (using nsopenpanel) , in application displays list of files in directory. working without problem.
however, if application open anew , without selecting directory through nsopenpanel, want list of files in selected directory in past startup error occurs
nscocoaerrordomain code = 257.
i suspect if user selects directory manually via nsopenpanel, scheme somehow remembers , give read access directory , getting files (using method contentsofdirectoryatpath), , if user not select via nsopenpanel directory , tries list of files error generated access.
how can in case?
if app sandboxed , want have access files/directories between runs, need store security-scoped bookmark directory, rather directory itself.
this means need add together boolean property com.apple.security.files.bookmarks.app-scope set yes entitlements of application, com.apple.security.files.user-selected.read-write allow file selection.
when select directory, need create bookmark it:
nsopenpanel *panel = [[nsopenpanel alloc] init]; panel.canchoosedirectories = yes; nsinteger ret = [panel runmodal]; if (ret == nsfilehandlingpanelokbutton) { nsurl *anurl = [[panel urls] lastobject]; nserror *err; nsdata *data = [anurl bookmarkdatawithoptions:nsurlbookmarkcreationwithsecurityscope includingresourcevaluesforkeys:nil relativetourl:nil error:&err]; if (!data) { nslog(@"%@", err); homecoming no; } now you've got bookmark, need persist e.g. doing:
nsuserdefaults *def = [nsuserdefaults standarduserdefaults]; [def setobject:data forkey:@"bookmark"]; [def synchronize]; on restart of application, need convert bookmark nsdata url, done doing:
bool stale = no; nserror *anerror; nsurl *url = [nsurl urlbyresolvingbookmarkdata:data options:nsurlbookmarkresolutionwithsecurityscope relativetourl:nil bookmarkdataisstale:&stale error:&anerror]; if (url && !stale) { [anurl startaccessingsecurityscopedresource]; // url [anurl stopaccessingsecurityscopedresource]; } else if (anerror) { nslog(@"%@", anerror); homecoming no; } and if had used defaults persistence of bookmark data, use:
nsuserdefaults *def = [nsuserdefaults standarduserdefaults]; nsdata *data = [def objectforkey:@"bookmark"]; to restore bookmark info userdefaults.
objective-c osx
No comments:
Post a Comment