Обычно:
- Либо вам не нужно получать уведомление о завершении записи изображения (во многих случаях это бесполезно), поэтому вы используете
nil
для обоих параметров - Или вы действительно хотите получать уведомление, когда файл изображения был записан в фотоальбом (или в результате возникла ошибка записи), и в этом случае вы обычно реализуете обратный вызов (= метод для вызова)завершение) в том же классе, из которого вы вызывали функцию
UIImageWriteToSavedPhotosAlbum
, поэтому completionTarget
обычно будет self
Как указано в документации, completionSelector
является селектором, представляющимметод с сигнатурой описан в документации, поэтому он должен иметь такую сигнатуру, как:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
Ему не обязательно иметь это точное имя, но он должен использовать ту же сигнатуру, а именно принимать 3 параметра(первый - UIImage
, второй - NSError
, а третий - void*
) и ничего не возвращают (void
).
Пример
Вы можете, например, Declесть и реализуйте метод, который вы могли бы вызывать как угодно:
- (void)thisImage:(UIImage *)image hasBeenSavedInPhotoAlbumWithError:(NSError *)error usingContextInfo:(void*)ctxInfo {
if (error) {
// Do anything needed to handle the error or display it to the user
} else {
// .... do anything you want here to handle
// .... when the image has been saved in the photo album
}
}
А когда вы вызываете UIImageWriteToSavedPhotosAlbum
, вы будете использовать его следующим образом:
UIImageWriteToSavedPhotosAlbum(theImage,
self, // send the message to 'self' when calling the callback
@selector(thisImage:hasBeenSavedInPhotoAlbumWithError:usingContextInfo:), // the selector to tell the method to call on completion
NULL); // you generally won't need a contextInfo here
Примечание кратное ':' в синтаксисе @selector(...)
.Двоеточие является частью имени метода, поэтому не забудьте добавить эти ':' в @ селектор (если он обучающий) при написании этой строки!