ios - OC中一个关于数组的问题。
天蓬老师
天蓬老师 2017-04-18 09:51:32
0
2
358

最近刚学iOS不久 跟着斯坦福上学着做计算器app

当用数组把操作数存入到栈中 发现数组中永远只有一个元素


@interface ViewController ()
@property (strong, nonatomic) IBOutlet UILabel *display;
@end

bool userIsInTheMiddleOfTyping = FALSE;
@implementation ViewController
- (IBAction)appendDigit:(UIButton *)sender {
    if(userIsInTheMiddleOfTyping){
    NSString *digit = sender.currentTitle;
    _display.text = [_display.text stringByAppendingString:digit];
    }else{
        _display.text = sender.currentTitle;
        userIsInTheMiddleOfTyping=TRUE;
    }
    
}

- (IBAction)enter {
    userIsInTheMiddleOfTyping = FALSE;
    NSMutableArray *operandstack = [[NSMutableArray alloc]init];
    [operandstack addObject:_display.text];
    NSLog(@"operandstack = %li", operandstack.count);
    NSLog(@"operandstack = %@", operandstack);

}

当点击一个enter按钮的时候 数组里就会加一个元素 但是情况是数组里永远只有一个元素

第一次点击后NSLog输出数组的count和内容的时候

2017-01-15 08:47:50.620 MYCalculator[32235:2359081] operandstack = 1
2017-01-15 08:47:50.622 MYCalculator[32235:2359081] operandstack = (
    3
)

之后第二次 第三次 都是显示有一个元素 永远是Label上那个最新的元素

2017-01-15 08:47:50.620 MYCalculator[32235:2359081] operandstack = 1
2017-01-15 08:47:50.622 MYCalculator[32235:2359081] operandstack = (
    3
)
2017-01-15 08:52:20.332 MYCalculator[32235:2359081] operandstack = 1
2017-01-15 08:52:20.334 MYCalculator[32235:2359081] operandstack = (
    236
) 

我就想知道之前加入数组的3 怎么不见了

小白一个 大神们轻喷

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(2)
Ty80

Objective-C에서 alloc은 메모리 공간을 여는 것이고, init는 초기화하는 것입니다.
버튼을 클릭할 때마다 - (IBAction)enter 메서드에서 배열 피연산자 스택이 다시 초기화되고 새 요소가 추가됩니다.
operandstack 배열을 속성으로 쓴 다음 - (void)viewDidLoad 메서드에서 한 번 초기화합니다.

으아아아
伊谢尔伦

NSMutablearray의 초기화 코드가 클릭 이벤트에 배치되기 때문에 클릭할 때마다 NSMutablearray가 다시 초기화되는데, 이는 이전 요소가 손실된다는 의미이므로 당연히 요소는 하나만 남게 됩니다. NSMutablearray를 멤버 변수나 속성으로 사용하여 이 문제를 해결할 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!