В Cocoa получаю ошибку при сохранении изображения

Я использовал этот код для сохранения изображения после масштабирования:

NSData *dataToWrite = [rep representationUsingType:NSPNGFileType  properties:nil];

[dataToWrite writeToFile:finalPath atomically:NO];

и он работал нормально, но теперь с новым Xcode я получаю предупреждение:

Null передается вызываемому объекту, которому требуется ненулевой аргумент

Что я должен указать в свойствах вместо нуля?

Большое спасибо за любую помощь


person Blue    schedule 28.10.2015    source источник


Ответы (2)


Вам нужно передать NSDictionary с возможными ключами к словарю, найденными в NSBitmapImageRep.h (хотя вы можете передать пустой словарь)

APPKIT_EXTERN NSString* NSImageCompressionMethod;   // TIFF input/output (NSTIFFCompression in NSNumber)
APPKIT_EXTERN NSString* NSImageCompressionFactor;   // TIFF/JPEG input/output (float in NSNumber)
APPKIT_EXTERN NSString* NSImageDitherTransparency;  // GIF output (BOOL in NSNumber)
APPKIT_EXTERN NSString* NSImageRGBColorTable;       // GIF input/output (packed RGB in NSData)
APPKIT_EXTERN NSString* NSImageInterlaced;      // PNG output (BOOL in NSNumber)
APPKIT_EXTERN NSString* NSImageColorSyncProfileData;    // TIFF,GIF input/output (NSData)
APPKIT_EXTERN NSString* NSImageFrameCount;  // GIF input (int in NSNumber) (read-only)
APPKIT_EXTERN NSString* NSImageCurrentFrame;    // GIF input (int in NSNumber)
APPKIT_EXTERN NSString* NSImageCurrentFrameDuration;    // GIF input (float in NSNumber) (read-only)
APPKIT_EXTERN NSString* NSImageLoopCount            ;   // GIF input (int in NSNumber) (read-only)
APPKIT_EXTERN NSString* NSImageGamma                ;   // PNG input/output (float in NSNumber)
APPKIT_EXTERN NSString* NSImageProgressive          ;   // JPEG input/output (BOOL in NSNumber)
APPKIT_EXTERN NSString* NSImageEXIFData             ;   // JPEG input/output (NSDictionary)
APPKIT_EXTERN NSString* NSImageFallbackBackgroundColor  NS_AVAILABLE_MAC(10_5); // JPEG output (NSColor)
person A O    schedule 28.10.2015
comment
У вас есть много вариантов, см. справочник по классам, чтобы узнать, как создать NSDictionary: developer.apple.com/library/mac/documentation/Cocoa/Reference/ Вы также можете просто использовать литерал, @{} Строки в моих ответах приведены возможные свойства, которые вы можете изменить (более подробную информацию см. В справочнике по классам). Вы можете использовать эти NSStrings * в качестве ключей в словаре, при этом значения являются значением, которое вы хотите, чтобы свойство было - person A O; 29.10.2015
comment
Если вам не нужны никакие свойства, просто сделайте следующее: NSData *dataToWrite = [rep representationUsingType:NSPNGFileType properties:@{}]; - person A O; 29.10.2015

Для тех, у кого такая же проблема, я решил создать этот NSDictionary:

NSDictionary * dict = [NSDictionary dictionaryWithObject: [NSNumber numberWithFloat:0.5] forKey:NSImageCompressionFactor];

и поставить "dict" вместо nil в свойствах.

person Blue    schedule 29.10.2015