Search code examples
iosswiftphotosauthority

How to check for authority to access photos?


I have a collectionview which is to load images from gallery

The first time app runs it always gets crashed because access is not given to use phtos .How to check for access in code??

override func viewDidLoad()
{
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.grayColor()
    let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil)

    var i = 0
    repeat
    {
        if (collection.count > 0)
        {
            if let first_Obj:AnyObject = collection.objectAtIndex(i)
            {
                self.assetCollection = first_Obj as! PHAssetCollection
            }
            i += 1
        }
    }while( i < collection.count)




    // Do any additional setup after loading the view.
}

 override func viewWillAppear(animated: Bool)
{
    if let layout = self.photoAlbum!.collectionViewLayout as? UICollectionViewFlowLayout{
        let cellSize = layout.itemSize

        self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height)
    }

    //fetch the photos from collection
    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
    self.photoAlbum!.reloadData()


}

Solution

  •  if ALAssetsLibrary.authorizationStatus() == ALAuthorizationStatus.NotDetermined {
        self.navigationController?.navigationBar.barTintColor = UIColor.grayColor()
        let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil)
    
        var i = 0
        repeat
        {
            if (collection.count > 0)
            {
                if let first_Obj:AnyObject = collection.objectAtIndex(i)
                {
                    self.assetCollection = first_Obj as! PHAssetCollection
                }
                i += 1
            }
        }while( i < collection.count)
    
    
    
    
        // Do any additional setup after loading the view.
    }
    
     override func viewWillAppear(animated: Bool)
    {
        if let layout = self.photoAlbum!.collectionViewLayout as? UICollectionViewFlowLayout{
            let cellSize = layout.itemSize
    
            self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height)
        }
    
        //fetch the photos from collection
        self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
        self.photoAlbum!.reloadData()
    
        }else {
        self.navigationController?.navigationBar.barTintColor = UIColor.grayColor()
        let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil)
    
        var i = 0
        repeat
        {
            if (collection.count > 0)
            {
                if let first_Obj:AnyObject = collection.objectAtIndex(i)
                {
                    self.assetCollection = first_Obj as! PHAssetCollection
                }
                i += 1
            }
        }while( i < collection.count)
    
    
    
    
        // Do any additional setup after loading the view.
    }
    
     override func viewWillAppear(animated: Bool)
    {
        if let layout = self.photoAlbum!.collectionViewLayout as? UICollectionViewFlowLayout{
            let cellSize = layout.itemSize
    
            self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height)
        }
    
        //fetch the photos from collection
        self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
        self.photoAlbum!.reloadData()
    
        }
    

    write this in viewWillAppear() or viewDidLoad()