2015-07-14 3 views
1

Я сохраняю изображение в рулоне камеры. Но когда это будет сделано, я должен сделать ссылку на изображение в БД. Логика довольно простаswift - UIImageWriteToSavedPhotosAlbum вызывает EXC_BAD_ACCESS

class MyDownloader{ 
    let db : DbHelper = DbHelper.sharedInstance 

    func downloadFileFromServer(){ 
     let urlString = "http://any-image.jpg" 
     let url = NSURL(string: urlString) 
     let data = NSData(contentsOfURL: url!) 
     let image = UIImage(data: data!) 
     if(image == nil){ 
      println("no downloaded image") 
     } 
     else{ 
      // THIS WORKS WITH NO ERRORS 
      --> --> UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 

      // THIS NEVER WORKS 
      --> --> UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) 
     } 
    } 

    func image(image: UIImage, didFinishSavingWithError error: NSErrorPointer, contextInfo:UnsafePointer<Void>) { 
     if error != nil { 
      // error feedback goes here 
     } 
     else{ 
      // save db reference here 
     } 
    } 
} 

ниже метод

UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) 

всегда возвращает EXC_BAD_ACCESS

+0

Вам удалось это решить? – Robertibiris

ответ

0

Ваш экземпляр класса MyDownloader, вероятно, быть высвобождены до отделки UIImageWriteToSavedPhotosAlbum вызова, поэтому, когда он пытается вызвать image: didFinishSavingWithError: contextInfo: метод, цель обратного вызова больше не существует. Убедитесь, что объект MyDownloader находится вокруг.

+0

Я понял! Но как я могу это сделать? Можно ли использовать статический метод? –

+0

добавить недвижимость - var aDownloader: MyDownloader? , затем, когда вы его используете, назначьте это свойство, которое будет содержать его. –

+0

Я пробовал так много способов. Ничего не работает = (. –

1

Возможно, вы должны сделать MyDownloader наследовать от NSObject, так как selector является частью среды выполнения Objective-C.