程序目标:在 viewController 上输入数字。当用户点击提交按钮时,用户输入的数据将被传递到不同的类以显示在不同的 viewController 上。
问题:我试图numberList
在实例方法 ( ) 中访问实例变量 ( -(void)insertNewNumber:(Numbers *)tempNumber
),但它从来没有给我正确的输出。但是当我通过协议方法访问同一个变量时UITableViewDataSource
,我得到了正确的答案。我通过在实例方法和协议方法中使用 NSLog 来解决这个问题。
由于我已声明numberList
为property
变量,因此我认为我可以从程序中的任何位置访问它并获取存储在其中的正确值。0
但是当从实例方法调用 NSLog 语句时,编译器会返回它们。当来自协议方法的 NSLog 语句时,显示了正确的结果。
请帮助我理解为什么会发生这种情况以及如何从程序中的任何方法将元素添加到数组中。
谢谢!
这是我正在处理的相关代码:
数字.h:
@interface Numbers:NSObject
@property (strong, retain) NSString *ID;
@property (strong, retain) NSInteger *number;
@end
数字.m
@implementation Numbers
@synthesize ID, number;
@end
DisplayNumbers.h
#import <UIKit/UIKit.h>
#import "Numbers.h"
@interface DisplayNumbers : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) NSMutableArray *numberList;
- (void)insertNewNumber:(Numbers *)tempNumber;
@end
DisplayNumbers.m:
@implementation DisplayNumbers
@synthesize numberList;
- (void)viewDidLoad
{
[super viewDidLoad];
numberList = [[NSMutableArray alloc] init];
Numbers *num0 = [[Numbers alloc] init];
Numbers *num1 = [[Numbers alloc] init];
num0.ID = [NSString stringWithFormat:@"ID 0"];
num0.number = 1111111111;
num1.ID = [NSString stringWithFormat:@"ID 1"];
num0.number = 2222222222;
[numberList addObject:num0];
[numberList addObject:num1];
}
- (void)insertNewNumber:(Numbers *)tempNumber
{
NSLog(@"numberList.count (in -(void)insetNewNumber) = %d", numberList.count);
[numberList addObject:tempNumber];
NSLog(@"numberList.count (in -(void)insetNewNumber) = %d", numberList.count);
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"numberList.count (in -(NSInteger)tableView:...) = %d", numberList.count);
Numbers *temp = [[Numbers alloc] init];
temp.ID = @"hi";
temp.Number = 1234;
[numberList addObject:temp];
NSLog(@"numberList.count (in -(NSInteger)tableView:...) = %d", numberList.count);
return numberList.count;
}
@end
编辑 1:调用insertNewNumber:
. 正在从不同的类调用此方法。
输入编号.h:
#import <UIKit/UIKit.h>
#import "DisplayNumbers.h"
@interface InputNumber:UIViewController
@property (retain, strong) NSInteger *enteredNumber;
-(void)enteredNumber;
@end
输入数字.m
@implementation InputNumber
@synthesize enteredNumber;
-(void)enterNumber
{
DisplayNumber *temp = [[DisplayNumber alloc] init];
[temp insertNewNumber:enteredNumber];
}
@end