プログラムの目標: viewController に数字を入力します。ユーザーが送信ボタンを押すと、ユーザーが入力したデータは別のクラスに渡され、別のビューコントローラーに表示されます。
numberList
問題:インスタンス メソッド ( ) 内のインスタンス変数 ( ) にアクセスしようとしています-(void)insertNewNumber:(Numbers *)tempNumber
が、正しい出力が得られません。しかし、 のプロトコル メソッドを介して同じ変数にアクセスするとUITableViewDataSource
、正しい答えが得られます。インスタンスメソッドとプロトコルメソッドで NSLog を使用してこれを理解しました。
numberList
変数として宣言しているのでproperty
、プログラムのどこからでもアクセスでき、そこに格納されている正しい値を取得できると考えていました。ただし、コンパイラは0
、インスタンス メソッドから呼び出されたときに NSLog ステートメントに対して返されました。プロトコル メソッドからの 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.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:
。このメソッドは別のクラスから呼び出されています。
InputNumber.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