NSString Quickies

From macwrench
Jump to navigation Jump to search

Die wichtigsten Format Specifiers

   %@     Object
   %d, %i signed int
   %u     unsigned int
   %f     float/double
   %.2f   float/double mit 2 Nachkommastellen
   %x, %X hexadecimal int
   %o     octal int
   %zu    size_t
   %p     pointer
   %e     float/double (in scientific notation)
   %g     float/double (as %f or %e, depending on value)
   %s     C string (bytes)
   %S     C string (unichar)
   %.*s   Pascal string (requires two arguments, pass pstr[0] as the first, pstr+1 as the second)
   %c     character
   %C     unichar
   %lld   long long
   %llu   unsigned long long
   %Lf    long double

Inhalte verarbeiten

Auf Buchstaben prüfen

Der folgende Codeschnippsel prüft, ob ein NSString ausschließlich aus Buchstaben besteht:

NSCharacterSet* nonAlnumset = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
if ([myString rangeOfCharacterFromSet:alnumset].location != NSNotFound)
{
    NSLog(@"this is not an alphanumeric string");
}

Den in einem CGRect sichtbaren Substring ermitteln

- (NSString*)string:(NSString*)string visibleInRect:(CGRect)rect withFont:(UIFont*)font
{
	NSString *visibleString = @"";
	for (int i = 1; i <= string.length; i++)
	{
		NSString *testString = [string substringToIndex:i];
		CGSize stringSize = [testString sizeWithFont:font constrainedToSize:CGSizeMake(rect.size.width,CGFLOAT_MAX)];
		if (stringSize.height > rect.size.height || stringSize.width > rect.size.width) {
			break;
		}
		visibleString = testString;
	}
	return visibleString;
}

Hinweis: Methoden, die auf das UI zugreifen bzw. dieses verändern, müssen zwingend im Main Thread laufen!

MD5-Prüfsumme erstellen

- (NSString *)md5
{
	return [[self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO] md5];
}

Die oben verwendete NSData-Methode md5 ist hier zu finden. Alternativ dazu hier eine statische Methode, dazu muss jedoch folgender Header importiert werden:

#import <CommonCrypto/CommonDigest.h>

// ...

+ (NSString *) md5:(NSString *)str {
	const char *cStr = [str UTF8String];
	unsigned char result[16];
	CC_MD5( cStr, strlen(cStr), result );
	return [NSString stringWithFormat:
			@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
			result[0], result[1], result[2], result[3], 
			result[4], result[5], result[6], result[7],
			result[8], result[9], result[10], result[11],
			result[12], result[13], result[14], result[15]
			]; 
}

NSString in URL-Kodierung

-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
	return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
			   (CFStringRef)self,
			   NULL,
			   (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
			   CFStringConvertNSStringEncodingToEncoding(encoding));
}

Konvertieren

In ein NSData Objekt überführen

... geht so:

NSData* myData;
myData = [myString dataUsingEncoding: NSASCIIStringEncoding];

... und umgekehrt:

NSString* myString;
myString = [[NSString alloc] initWithData:myData encoding:NSASCIIStringEncoding];

Einen formatierten Dezimalwert erstellen

Um beispielsweise aus einer Ganzzahl einen formatierten Dezimalwert mit zwei Nachkommastellen und einem Komma als Trennzeichen zu erstellen, benutzt man am Einfachsten einen den NSNumberFormatter:

NSNumber *myNumber = [NSNumber numberWithFloat:(myInteger/100)];
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setDecimalSeparator:@","];
[nf setMaximumFractionDigits:2];
NSString *myString = [nf stringFromNumber:weight];
[nf release];

Siehe auch