程序目標:在viewController上輸入數字。當用戶點擊提交按鈕時,用戶輸入的數據被傳遞到不同的類,以在不同的viewController上顯示。從方法訪問實例變量
問題:我試圖訪問實例方法(-(void)insertNewNumber:(Numbers *)tempNumber
)中的實例變量(numberList
),但它從不給我正確的輸出。但是當我通過UITableViewDataSource
的協議方法訪問相同的變量時,我得到了正確的答案。我通過使用NSLog實例方法和協議方法來解決這個問題。
由於我宣稱numberList
爲property
變量,我認爲我可以從程序中的任何位置訪問它並獲取存儲在其中的正確值。但編譯器在從實例方法調用NSLog語句時返回0
。當來自協議方法的NSLog語句顯示正確的結果時。
請幫我理解爲什麼會發生這種情況,以及如何從程序中的任何方法添加元素到數組中。
謝謝!
下面是相關的代碼,我的工作:
Numbers.h:
@interface Numbers:NSObject
@property (strong, retain) NSString *ID;
@property (strong, retain) NSInteger *number;
@end
Numbers.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。米:
@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:
呼叫。 此方法正在從不同的類中調用。
InputNumber.h:
#import <UIKit/UIKit.h>
#import "DisplayNumbers.h"
@interface InputNumber:UIViewController
@property (retain, strong) NSInteger *enteredNumber;
-(void)enteredNumber;
@end
InputNumber.m
@implementation InputNumber
@synthesize enteredNumber;
-(void)enterNumber
{
DisplayNumber *temp = [[DisplayNumber alloc] init];
[temp insertNewNumber:enteredNumber];
}
@end
你在哪個地方調用'insertNewNumber'? – sergio
在[viewDidLoad]之前[insertNewNumber]是否被調用? – onnoweb
@onnoweb; @sergio:謝謝你的迴應。請看看編輯1.謝謝。 –