Storing images locally on an iOS device

前端 未结 3 1026
别跟我提以往
别跟我提以往 2020-11-28 02:56

Some iOS photo-related apps store images created with the app somewhere other than the photo library. For example Fat Booth shows a scrolling list of photos created with the

相关标签:
3条回答
  • 2020-11-28 03:31

    You can do it with core data by storing binary data, but its not recommended. There is a much better way - especially for photos. Your application has a documents/file directory that only your app can access. I recommend starting here for the concepts and how to access it. Its relatively straightforward. You may want to combine this with core data to store file paths, metadata, etc. http://developer.apple.com/library/mac/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html

    0 讨论(0)
  • 2020-11-28 03:37

    The simplest way is to save it in the app's Documents directory and save the path with NSUserDefaults like so:

    NSData *imageData = UIImagePNGRepresentation(newImage);
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    NSString *imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"cached"]];
    
    NSLog(@"pre writing to file");
    if (![imageData writeToFile:imagePath atomically:NO]) 
    {
        NSLog(@"Failed to cache image data to disk");
    }
    else
    {
        NSLog(@"the cachedImagedPath is %@",imagePath); 
    }
    

    Then save the imagePath in some dictionary in NSUserDefaults or however you'd like, and then to retrieve it just do:

     NSString *theImagePath = [yourDictionary objectForKey:@"cachedImagePath"];
     UIImage *customImage = [UIImage imageWithContentsOfFile:theImagePath];
    
    0 讨论(0)
  • 2020-11-28 03:41

    For Swift:

    let imageData = UIImagePNGRepresentation(selectedImage)
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    let imagePath = paths.stringByAppendingPathComponent("cached.png")
    
    if !imageData.writeToFile(imagePath, atomically: false)
    {
       println("not saved")
    } else {
       println("saved")
       NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
    }
    

    For Swift 2.1:

    let imageData = UIImagePNGRepresentation(selectedImage)
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    let imageURL = documentsURL.URLByAppendingPathComponent("cached.png")
    
    if !imageData.writeToURL(imageURL, atomically: false)
    {
        print("not saved")
    } else {
        print("saved")
        NSUserDefaults.standardUserDefaults().setObject(imageData, forKey: "imagePath")
    }
    

    stringByAppendingPathComponent is unavailable in Swift 2.1 so you can use URLByAppendingPathComponent. Get more info here.

    0 讨论(0)
提交回复
热议问题