我是Objective-C和Xcode的新手(也是编程新手)。我正在尝试构建一个简单的纸牌游戏,所以我创建了一个带有属性和实例方法的Cards
类,并将其头文件导入到" Viewcontroller.m"。
但是,我不明白两件事:
为什么" Cards.m"中的NSLog
我编译时没有在控制台中显示。但是NSLog
在" Viewcontroller.m"显示器
似乎我无法调用Cards
类(NSMutableArray
)属性。即使我在" Cards.m"," Viewcontroller.m"中没有错误地初始化它,数组仍然是空的。
非常感谢你的帮助,因为我非常挣扎!
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
答案 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)
你有一些问题。
=
而不是==
将self
分配给[super init]
。Cards init
方法应调用makeContents
进行自我设置。更新您的init
方法,如下所示:
-(id)init{
self = [super init];
if (self) {
contents = [[NSMutableArray alloc]initWithCapacity:53];
[self makeContents];
}
return self;
}
这也意味着makeContents
只能由Cards
类本身调用。因此,您应该从.h文件中删除- (void)makeContents
的声明。
此外,您无需使用@synthesize
。只需删除该行。并尝试找到一个不使用这种过时代码的更新的教程。