샌드 박스를 사용하여 하나의 파일을 열고 같은 이름의 다른 파일에 액세스 할 수 있습니다.

user2970742

NSOpenpPanel을 사용하여 myfile.plist를 열고 싶지만 사용자가 plist를 방금 선택한 경우에도 myfile.png에 액세스합니다. 나는 이미 png에 액세스하려고 시도했습니다.

NSString* url = [[NSString stringWithFormat:@"file://localhost%@%@%@", pathWithoutFilename, @"/", imageFileName ]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

하지만 :

NSData* imageData = [[NSData alloc] initWithContentsOfURL:nsurl];
NSImage *sourceImage = [[NSImage alloc] initWithData:imageData];

NSImage가 nil입니다.

제가 어떻게하면?

user2970742

다음은 Sandbox Cocoa 앱용 NSURLBookmarkCreationWithSecurityScope를 사용하여 북마크를 저장하고 검색하는 올바른 방법입니다.

-(void)saveTheNSData:(NSData *)data withFileName:(NSString *)fileName
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

    [data writeToFile:filePath atomically:NO];
}

-(NSURL*) getNSURLFromBookmarkIfExists:(NSString*) filename forType:(NSString*) type
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:filename];

    NSData* data = [[NSData alloc] initWithContentsOfFile: filePath];
    if(data != nil)
    {
        NSURL* outUrl = [NSURL URLByResolvingBookmarkData:[[NSUserDefaults standardUserDefaults] objectForKey:type] options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:nil error:nil];
        [outUrl startAccessingSecurityScopedResource];
        return outUrl;
    }
    else
        return nil;
}

또한 트릭을 수행하는 [NSUserDefaults standardUserDefaults]사용하여 책갈피를 설정하는 올바른 방법 이 예제 를 참조하십시오 .

-(void) savePlistWithPlistUrl:(NSURL*) plistUrl andImageUrl:(NSURL*) imageUrl
{
    NSData *bookmarkPlist = [self bookmarkFromURL:plistUrl];

    NSArray* pathSplitted = [pathFilePlist pathComponents];
    NSString* filenamePlist = [pathSplitted objectAtIndex:[pathSplitted count]-1];

    NSData *bookmarkImage = [self bookmarkFromURL:imageUrl];

    NSArray* pathImageSplitted = [imageUrl pathComponents];
    NSString* filenameImage = [pathImageSplitted objectAtIndex:[pathImageSplitted count]-1];

    NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:bookmarkPlist forKey:@"ExportPlist"];
    [prefs setObject:bookmarkImage forKey:@"ExportImage"];
    [prefs synchronize];
    // save the data bookmark
    [self saveTheNSData: bookmarkPlist withFileName:filenamePlist];
    [self saveTheNSData: bookmarkImage withFileName:filenameImage];
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관