Note that there are some explanatory texts on larger screens.

plurals
  1. PONSInvalidArgumentException reason: [NSString base64StringFromData:]: unrecognized selector sent to class
    primarykey
    data
    text
    <p>I'm really stuck on this one, mainly because the same Code works in a CommandLine project but not using the iPhone simulator:</p> <p>Heres the Code:</p> <p>ViewController.m</p> <pre><code>#import "ViewController.h" #import "NSString+Base64.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSString* test = @"hello"; NSData* data = [test dataUsingEncoding:NSUTF8StringEncoding]; [NSString base64StringFromData:data]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end </code></pre> <p>Using a Base64-encoder found on stackoverflow NSString+Base64.m:</p> <pre><code>#import &lt;Foundation/NSString.h&gt; #import "NSString+Base64.h" static char base64EncodingTable[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; @implementation NSString (NSStringAdditions) + (NSString *) base64StringFromData: (NSData *)data { return [NSString base64StringFromData:data length:(int)data.length]; } + (NSString *) base64StringFromData: (NSData *)data length: (int)length { unsigned long ixtext, lentext; long ctremaining; unsigned char input[3], output[4]; short i, charsonline = 0, ctcopy; const unsigned char *raw; NSMutableString *result; lentext = [data length]; if (lentext &lt; 1) return @""; result = [NSMutableString stringWithCapacity: lentext]; raw = [data bytes]; ixtext = 0; while (true) { ctremaining = lentext - ixtext; if (ctremaining &lt;= 0) break; for (i = 0; i &lt; 3; i++) { unsigned long ix = ixtext + i; if (ix &lt; lentext) input[i] = raw[ix]; else input[i] = 0; } output[0] = (input[0] &amp; 0xFC) &gt;&gt; 2; output[1] = ((input[0] &amp; 0x03) &lt;&lt; 4) | ((input[1] &amp; 0xF0) &gt;&gt; 4); output[2] = ((input[1] &amp; 0x0F) &lt;&lt; 2) | ((input[2] &amp; 0xC0) &gt;&gt; 6); output[3] = input[2] &amp; 0x3F; ctcopy = 4; switch (ctremaining) { case 1: ctcopy = 2; break; case 2: ctcopy = 3; break; } for (i = 0; i &lt; ctcopy; i++) [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]]; for (i = ctcopy; i &lt; 4; i++) [result appendString: @"="]; ixtext += 3; charsonline += 4; if ((length &gt; 0) &amp;&amp; (charsonline &gt;= length)) charsonline = 0; } return result; } + (NSData *)base64DataFromString: (NSString *)string { unsigned long ixtext, lentext; unsigned char ch, inbuf[4], outbuf[3]; short i, ixinbuf; Boolean flignore, flendtext = false; const unsigned char *tempcstring; NSMutableData *theData; if (string == nil) { return [NSData data]; } ixtext = 0; tempcstring = (const unsigned char *)[string UTF8String]; lentext = [string length]; theData = [NSMutableData dataWithCapacity: lentext]; ixinbuf = 0; while (true) { if (ixtext &gt;= lentext) { break; } ch = tempcstring [ixtext++]; flignore = false; if ((ch &gt;= 'A') &amp;&amp; (ch &lt;= 'Z')) { ch = ch - 'A'; } else if ((ch &gt;= 'a') &amp;&amp; (ch &lt;= 'z')) { ch = ch - 'a' + 26; } else if ((ch &gt;= '0') &amp;&amp; (ch &lt;= '9')) { ch = ch - '0' + 52; } else if (ch == '+') { ch = 62; } else if (ch == '=') { flendtext = true; } else if (ch == '/') { ch = 63; } else { flignore = true; } if (!flignore) { short ctcharsinbuf = 3; Boolean flbreak = false; if (flendtext) { if (ixinbuf == 0) { break; } if ((ixinbuf == 1) || (ixinbuf == 2)) { ctcharsinbuf = 1; } else { ctcharsinbuf = 2; } ixinbuf = 3; flbreak = true; } inbuf [ixinbuf++] = ch; if (ixinbuf == 4) { ixinbuf = 0; outbuf[0] = (inbuf[0] &lt;&lt; 2) | ((inbuf[1] &amp; 0x30) &gt;&gt; 4); outbuf[1] = ((inbuf[1] &amp; 0x0F) &lt;&lt; 4) | ((inbuf[2] &amp; 0x3C) &gt;&gt; 2); outbuf[2] = ((inbuf[2] &amp; 0x03) &lt;&lt; 6) | (inbuf[3] &amp; 0x3F); for (i = 0; i &lt; ctcharsinbuf; i++) { [theData appendBytes: &amp;outbuf[i] length: 1]; } } if (flbreak) { break; } } } return theData; } @end </code></pre> <p>and this is the resulting error-output:</p> <pre><code>2012-11-14 23:04:54.366 test[9527:c07] +[NSString base64StringFromData:]: unrecognized selector sent to class 0xd7fd9c 2012-11-14 23:04:54.368 test[9527:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSString base64StringFromData:]: unrecognized selector sent to class 0xd7fd9c' </code></pre> <p>As I'm fairly new to objective-c, im not quite sure how to figure out what the callstack means or how to interpret the error.</p> <p>any insights on why the base64 encoding fails?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload