मैं एक आवेदन जहाँ मैं सर्वर से PNG
और JPG
छवियों को भेजने की जरूरत है लिख रहा हूँ। जेपीईजी/पीएनजी छवि को बेस 64 स्ट्रिंग में बदलने के लिए कोड मैंने ओबीजे-सी ब्लॉक के रूप में लिखा था। लेकिन जब मैंने ब्लॉक द्वारा NSDictionary
पर स्ट्रिंग को जोड़ने की कोशिश की तो मुझे code=EXC_ARM_DA_ALIGN
मिला। मेरी परियोजना में मैं एआरसी का उपयोग करता हूं। मैंने इस समस्या पर कई पोस्ट पढ़े हैं ARC: EXC_BAD_ACCESS when calling a method from inside a block, inside a delegate method तो मैं copy
का उपयोग करता हूं! लेकिन इससे मेरी मदद नहीं हुई। इससे पहले कि मैं copy
का उपयोग करता हूं, मुझे EXC_BAD_EXCEPTION
कोड = 1 के साथ मिला और अब शीर्षक पर कोड के साथ।एआरसी के साथ ब्लॉक का उपयोग करते समय मुझे EXC_BAD_ACCESS_EXCEPTION (कोड = EXC_ARM_DA_ALIGN) क्यों मिला?
__block NSUInteger image_size;
//Obj-C block where PNG or JPEG image converts to Base64 string
NSString* (^ToBase64)(UIImage* imageToConvert, NSMutableDictionary* metadata) =
^(UIImage* imageToConvert, NSMutableDictionary* metadata)
{
NSMutableData *rawData = [NSMutableData data];
NSString* encodedImage ;
if ([(NSString*)[metadata objectForKey:@"extension"] isEqualToString:@"PNG"])
{
[rawData setData:UIImagePNGRepresentation(imageToConvert)];
[Base64 initialize];
encodedImage = [Base64 encode:rawData];
image_size = [rawData length];
}
else if ([(NSString*)[metadata objectForKey:@"extension"] isEqualToString:@"JPG"])
{
[rawData setData:UIImageJPEGRepresentation(imageToConvert, 1.0)];
[Base64 initialize];
encodedImage = [Base64 encode:rawData];
image_size = [rawData length];
}
return encodedImage;
} ;
//Initialize dictionary with image data and metadata to send
int iteration = 0;
for (UIImage* currentEntry in imagesToSent)
{
NSMutableDictionary* currentImageMetadata = (NSMutableDictionary*)[imagesMetadata objectAtIndex:iteration];
[uploadMessage setObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:
[ToBase64(currentEntry,currentImageMetadata) copy],@"image_data", //here I got an exception
[currentImageMetadata objectForKey:@"extension"], @"extension",
[currentImageMetadata objectForKey:@"image_name" ], @"image_name", image_size, @"size", nil]
forKey:[NSString stringWithFormat:@"image%d",iteration]];
iteration++;
}
क्या यह सब सचमुच एक विधि में है? तो ब्लॉक को कॉल करने से पहले स्थानीय रूप से सही बनाया गया है? या आपने अलग-अलग तरीकों से कोड कॉपी/पेस्ट किया है? साथ ही, इसे ध्यान में रखें कि 'image_size' को एनएसएनंबर में शब्दकोश में जोड़ने से पहले बॉक्सिंग करने की आवश्यकता है। एक नए कंपाइलर के साथ, आप इसे '@ (image_size) 'के साथ कर सकते हैं। –
@FirozeLafeer: यह समस्या का जवाब जैसा दिखता है! –
@FirozeLafeer का सही उत्तर – Danilo