2015-12-17 4 views
-1
- (IBAction)saveBtn:(id)sender { 
    UIImage* imageToSave = [self imageByCombiningImage:self.backgroundImage.image withImage:self.tempImage.image]; 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    // Request to save the image to camera roll 

    [library writeImageToSavedPhotosAlbum:[imageToSave CGImage] orientation:(ALAssetOrientation)[imageToSave imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ 
     if (error) { 
      NSLog(@"error"); 
     } else { 
      CGFloat compression = 0.0;   
      NSData *imageData = UIImageJPEGRepresentation(imageToSave, compression); 
      UIImage *compressedImage = [[UIImage alloc]initWithData:imageData]; 
      NSMutableString *imageName = [[NSMutableString alloc] initWithCapacity:0]; 

      CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault); 
      if (theUUID) { 
       [imageName appendString:CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, theUUID))]; 
       CFRelease(theUUID); 
      } 
      [imageName appendString:@".png"]; 

      NSLog(@"Image name: %@", imageName); 

      //Image Data to web service 
      [self uploadImage:UIImageJPEGRepresentation(compressedImage, 1.0) filename:imageName]; 

      _savedImageURL = assetURL; 
      [library assetForURL:_savedImageURL 
        resultBlock:resultblock 
        failureBlock:failureblock]; 
    }]; 
} 

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
{ 
    ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
    CGImageRef iref = [rep fullResolutionImage]; 
    if (iref) { 
     UIImage *largeimage = [UIImage imageWithCGImage:iref]; 
     //image Property needs to be access here 
    } 
}; 

Я не могу получить доступ к какой-либо собственности внутри этого блока. Как я сделал свойство UIImage в файле .h, но я не могу получить доступ к этому в этом блоке результатов.Доступ к объекту внутри объекта блока c

+1

Требуется дополнительная информация. Где этот блок определен? Какая у вас ошибка? Ваш комментарий подсказывает вам, что вы пытаетесь получить доступ к переменной _instance_ (которая может быть сгенерирована свойством), это действительно то, что вы хотите. ** Пожалуйста, отредактируйте свой вопрос ** и укажите больше кода и деталей. ** Не публикуйте код в комментариях **, спасибо. – DarkDust

+0

, где вы назначаете блок? – Aris

+0

Блок назначается и реализуется в .m файле –

ответ

-3

Следующее решения вы можете создать блок свойство от всего контроллера, как это:

__block MyViewController *blocksafeSelf = self; 

и внутри блока, который вы можете использовать это свойство для доступа:

blocksafeSelf.myProperty; 
метод

или вызова:

dispatch_async(dispatch_get_main_queue(),^
     [blocksafeSelf processNewMessage:text] 
}); 
+0

'__block' предназначен только для переменной. 'self' здесь не назначается. – newacct

0

Если код, который вы опубликовали, действительно тот, который вы используете, тогда он определяет переменную wh ich ссылается на блок. Но эта переменная составляет , а не часть вашего класса, и поэтому вы не можете ссылаться на какие-либо переменные экземпляра.

Вместо этого переменная находится на «C верхнем уровне», вне любого класса. Возможно, вы захотите включить его в переменную экземпляра, например, например:

@interface MyClass : SomeSuperClass 
{ 
    // Define an instance variable. 
    ALAssetsLibraryAssetForURLResultBlock resultblock; 
} 
@end 

@implementation MyClass 

- (void)someMethod 
{ 
    // Initialize the variable in `init`, `viewDidLoad` or whichever 
    // method suits you. 
    resultblock = ^(ALAsset *myasset) 
    { 
     ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
     CGImageRef iref = [rep fullResolutionImage]; 
     if (iref) { 
      UIImage *largeimage = [UIImage imageWithCGImage:iref]; 
      //image Property needs to be access here 
     } 
    }; 
} 

@end 

Вы также можете использовать недвижимость.

+0

Этот трюк поможет. Спасибо за помощь. –

+0

Но вы не используете здесь 'self' или любые переменные экземпляра. И если бы вы это сделали, это создало бы цикл сохранения. – newacct

+0

@newacct: Вы знаете трюк создания слабой ссылки на 'self' перед блоком и сделать его сильным внутри блока, чтобы разбить цикл сохранения? – DarkDust