Xcode中的Objective C - NSLog并访问其他类属性

时间:2016-05-01 22:06:36

标签: ios objective-c xcode

我是Objective-C和Xcode的新手(也是编程新手)。我正在尝试构建一个简单的纸牌游戏,所以我创建了一个带有属性和实例方法的Cards类,并将其头文件导入到" Viewcontroller.m"。

但是,我不明白两件事:

  1. 为什么" Cards.m"中的NSLog我编译时没有在控制台中显示。但是NSLog在" Viewcontroller.m"显示器

  2. 似乎我无法调用Cards类(NSMutableArray)属性。即使我在" Cards.m"," Viewcontroller.m"中没有错误地初始化它,数组仍然是空的。

  3. 非常感谢你的帮助,因为我非常挣扎!

    Cards.h:

    @interface Cards : NSObject
    
    @property (strong, nonatomic) NSMutableArray* contents;
    
    -(void)makeContents;
    
    @end
    

    Cards.m:

    #import "Cards.h"
    @interface Cards()
    
    @end
    
    @implementation Cards
    
    @synthesize contents;
    
    -(id)init{
        if(self==[super init]){
            contents = [[NSMutableArray alloc]initWithCapacity:53];
        }
    
        return self;
    }
    
    -(void) makeContents{
         NSArray* suits = @[@"♥︎",@"♠︎",@"♣︎",@"♦︎" ];
    
         NSArray* ranks = [[NSArray alloc]initWithObjects:@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K", nil];
         for(NSString* suiting in suits){
            for(NSString* ranking in ranks){
                NSString* cards = [NSString stringWithFormat:@"%@ %@", ranking,suiting];
                [contents addObject:cards];
    
                NSLog(@"%@", contents);//not displaying in console
            }
        }
    }
    
    @end
    

    ViewController.m:

    #import "ViewController.h"
    #import "Cards.h"
    
    @interface ViewController ()
    
    @property (weak, nonatomic) IBOutlet UILabel *flipCount;
    @property (nonatomic) int numberOfFlip;
    
    @end
    
    @implementation ViewController
    
    -(void)viewDidLoad{
        Cards* cards = [[Cards alloc]init];
    
        NSLog(@"%@", cards.contents); //displaying in console, the contents is an empty array still? why??
    }
    
    - (IBAction)flipCard:(UIButton *)sender {
    }
    
    @end
    

2 个答案:

答案 0 :(得分:0)

您创建并定义方法makeContents但从未在任何地方实际调用它。尝试使用viewDidLoad方法调用它:

-(void)viewDidLoad{
    [super viewDidLoad];

    Cards* cards = [[Cards alloc]init];
    [cards makeContents];
     NSLog(@"%@", cards.contents); //displaying in console, the contents is an empty array still? why??

}

答案 1 :(得分:0)

你有一些问题。

  1. 您应该使用=而不是==self分配给[super init]
  2. Cards init方法应调用makeContents进行自我设置。
  3. 更新您的init方法,如下所示:

    -(id)init{
        self = [super init];
        if (self) {
            contents = [[NSMutableArray alloc]initWithCapacity:53];
            [self makeContents];
        }
    
        return self;
    }
    

    这也意味着makeContents只能由Cards类本身调用。因此,您应该从.h文件中删除- (void)makeContents的声明。

    此外,您无需使用@synthesize。只需删除该行。并尝试找到一个不使用这种过时代码的更新的教程。