Din*_*kar 0 iphone objective-c ipad
我正在编写一个程序,它在文本字段中打印字符串的反转,从另一个文本字段中获取输入文本.在将文本输入到一个文本字段后按Enter键时,结果(反向)应显示在另一个文本字段中.
我试过这样,但结果很奇怪.
.h文件:
#import <UIKit/UIKit.h>
@interface reverseVC : UIViewController {
UITextField *textEntered;
UITextField *textDisplay;
}
@property (nonatomic,retain) IBOutlet UITextField *textDisplay;
@property (nonatomic,retain) IBOutlet UITextField *textEntered;
- (NSMutableArray*) stringReverse;
- (IBAction) enter;
@end
Run Code Online (Sandbox Code Playgroud)
.m文件
- (NSMutableArray *) stringReverse
{
NSString *value = textEntered.text;
NSArray *tempArray = [[[NSArray alloc] initWithObjects:value,nil] autorelease];
NSMutableArray *arr = [[[NSMutableArray alloc] init] autorelease];
for (int i=[tempArray count]-1; i>=0; i--)
{
[arr addObject:[tempArray objectAtIndex:i]];
NSLog(@"the object is:%c",arr);
}
return arr;
}
-(IBAction)enter
{
textDisplay.text = [NSString stringWithFormat:@"%c",[self stringReverse]];
}
Run Code Online (Sandbox Code Playgroud)
之前在数组初始化中放置nil和autorelease之前得到了SIG_ABT和EXE_BAD_ACCESS之类的警告.现在警告已经解决,但结果不合需要.
我哪里错了?
您在数组中插入NSString对象.它的计数是1.你必须从字符串的末尾到开头,并将字符附加到一个新的字符串.你可以这样做:
-(NSString*)reverseString:(NSString*)string {
NSMutableString *reversedString;
int length = [string length];
reversedString = [NSMutableString stringWithCapacity:length];
while (length--) {
[reversedString appendFormat:@"%C", [string characterAtIndex:length]];
}
return reversedString;
}
Run Code Online (Sandbox Code Playgroud)
反转字符串的另一种方法是使用反向字符串枚举器.
- (NSString *)reverseString:(NSString *)string {
NSMutableString *reversedString = [[NSMutableString alloc] init];
NSRange fullRange = [string rangeOfString:string];
NSStringEnumerationOptions enumerationOptions = (NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences);
[string enumerateSubstringsInRange:fullRange options:enumerationOptions usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[reversedString appendString:substring];
}];
return reversedString;
}
Run Code Online (Sandbox Code Playgroud)