0

程序目标:在 viewController 上输入数字。当用户点击提交按钮时,用户输入的数据将被传递到不同的类以显示在不同的 viewController 上。

问题:我试图numberList在实例方法 ( ) 中访问实例变量 ( -(void)insertNewNumber:(Numbers *)tempNumber),但它从来没有给我正确的输出。但是当我通过协议方法访问同一个变量时UITableViewDataSource,我得到了正确的答案。我通过在实例方法和协议方法中使用 NSLog 来解决这个问题。

由于我已声明numberListproperty变量,因此我认为我可以从程序中的任何位置访问它并获取存储在其中的正确值。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   
4

2 回答 2

0

由于您在方法中分配了 numberList ,ViewDidLoad因此请务必调用.insertNewNumberViewDidLoad

我相信

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    Numbers *temp = [[Numbers alloc] init];
    temp.ID = @"hi";
    temp.Number = 1234;
    [self insertNewNumber:temp];
   return contactList.count;
}

有效,对吧?

如果您需要insertNewNumber在调用 to 之前调用您的方法,请ViewDidLoad分配您的 numberList

numberList = [[NSMutableArray alloc] init]; 

在重载的initWithNibName:bundle:方法中。

于 2012-10-01T17:54:01.840 回答
0

您的代码没有名为numberList. 您需要像这样调用该属性:

self.numberList = [NSMutableArray array];

无需分配/初始化,因为您已经在使用强引用。

每次引用该numberList对象时,都需要使用self.numberList.

[self.numberList addObject:num0];
[self.numberList addObject:num1];
于 2012-10-01T17:58:33.450 回答