Iphone 使用NSMutableString(初学者)

Iphone 使用NSMutableString(初学者),iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在使用NSMutableString,遇到了一些困难。每当我尝试访问该应用程序时,该应用程序就会退出,并且它不会在NSLog中说有任何问题 我在view-did-load方法中设置了字符串,以便我的字符串能够保留其信息,而不是被重置,但我不相信我对这方面的了解是正确的。任何帮助都会很好。谢谢 #import <UIKit/UIKit.h> @class rootViewController; @interface Numpad : UIViewController {

我正在使用NSMutableString,遇到了一些困难。每当我尝试访问该应用程序时,该应用程序就会退出,并且它不会在NSLog中说有任何问题

我在view-did-load方法中设置了字符串,以便我的字符串能够保留其信息,而不是被重置,但我不相信我对这方面的了解是正确的。任何帮助都会很好。谢谢

#import <UIKit/UIKit.h>

@class rootViewController;

@interface Numpad : UIViewController {

    rootViewController *viewController;

    UIButton *one;
    UIButton *two;
    UIButton *three;

    NSInteger *loggedNumbers;
    NSMutableString *numberString;
}

-(IBAction)buttonClicked:(id)sender;


@property (nonatomic, retain)IBOutlet UIButton *one;
@property (nonatomic, retain)IBOutlet UIButton *two;
@property (nonatomic, retain)IBOutlet UIButton *three;

@property (nonatomic, retain) rootViewController *viewController;


@end

您需要在初始化时保留字符串。

您需要在初始化时保留字符串。

字符串本身不会保留,因为您是通过方便的方法为numberString赋值,所以您应该自己保留它。所以viewDidLoad应该是这样的

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {   
    numberString = [[[NSMutableString stringWithString: @""] retain];
    [super viewDidLoad];
}
或者你应该分配它

numberString = [[NSMutableString alloc] initWithString: @""] retain];

字符串本身不会保留,因为您是通过便利方法为numberString赋值的,所以您应该自己保留它。所以viewDidLoad应该是这样的

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {   
    numberString = [[[NSMutableString stringWithString: @""] retain];
    [super viewDidLoad];
}
或者你应该分配它

numberString = [[NSMutableString alloc] initWithString: @""] retain];

此外,如果您只想附加某些内容,则可能需要使用-[NSMutableString appendString:]而不是insertString:AtIndex:。@猜对“是”,就像您需要在字符串的末尾附加一样,因此appendString比insertString:AtIndex更好。此外,您可能需要使用-[NSMutableString appendString:]而不是insertString:AtIndex:如果您只想附加一些东西。@猜谜是正确的,就像您需要在字符串的末尾附加一样,因此appendString比insertString更好:AtIndex是否有理由不只是将
标记
强制转换为
双精度
?为什么要使用字符串作为中间人?原因是这是某种键盘实现。按1 2 3,字符串(和双精度)是123,其中一个铸造标记是3。由于您是初学者,我认为现在建议您遵循并以大写字母开始类名还不算太晚。它使阅读代码变得更容易。一旦你了解了类方法,你就会明白我为什么建议这样做。你为什么不把
标记
转换成
双标记
?为什么要使用字符串作为中间人?原因是这是某种键盘实现。按1 2 3,字符串(和双精度)是123,其中一个铸造标记是3。由于您是初学者,我认为现在建议您遵循并以大写字母开始类名还不算太晚。它使阅读代码变得更容易。一旦你了解了课堂教学法,你就会明白为什么我会提出这个建议。