Objective c 调用drawRect时,UIView类属性似乎消失了:

Objective c 调用drawRect时,UIView类属性似乎消失了:,objective-c,uiview,uiviewcontroller,drawrect,iboutlet,Objective C,Uiview,Uiviewcontroller,Drawrect,Iboutlet,我正在用xcode编写一个objective-c项目 我有两个正在使用的重要文件:一个viewcontroller和一个view。 我的视图是class PlayingCardView,我的视图控制器是class:PlayingCardGameViewController 以下是PlayingCardView.h的外观: #import <UIKit/UIKit.h> @interface PlayingCardView : UIView @property (nonatomic

我正在用xcode编写一个objective-c项目

我有两个正在使用的重要文件:一个viewcontroller和一个view。 我的视图是class PlayingCardView,我的视图控制器是class:PlayingCardGameViewController

以下是PlayingCardView.h的外观:

#import <UIKit/UIKit.h>

@interface PlayingCardView : UIView

@property (nonatomic) NSUInteger rank;
@property (strong, nonatomic) NSString *suit;
@property (nonatomic) BOOL faceUp;

@end
#import "PlayingCardGameViewController.h"

@interface PlayingCardGameViewController ()

@property (weak, nonatomic) IBOutlet PlayingCardView *playingCardView;

@end

@implementation PlayingCardGameViewController

-(void)viewDidLoad {
    NSLog(@"Calling view did load");
    [super viewDidLoad];
    self.playingCardView.suit = @"♥︎";
    self.playingCardView.rank = 13;
}

@end
以下是PlayingCardGameViewController.m的外观:

#import <UIKit/UIKit.h>

@interface PlayingCardView : UIView

@property (nonatomic) NSUInteger rank;
@property (strong, nonatomic) NSString *suit;
@property (nonatomic) BOOL faceUp;

@end
#import "PlayingCardGameViewController.h"

@interface PlayingCardGameViewController ()

@property (weak, nonatomic) IBOutlet PlayingCardView *playingCardView;

@end

@implementation PlayingCardGameViewController

-(void)viewDidLoad {
    NSLog(@"Calling view did load");
    [super viewDidLoad];
    self.playingCardView.suit = @"♥︎";
    self.playingCardView.rank = 13;
}

@end
我加入了一些NSLog,以查看调用的顺序以及正在发生的事情。以下是打印出来的内容:

CardMatchingGame_分配04[87470:3734148]调用视图未加载 卡片配对游戏分配04[87470:3734148]套装已设置 已设置CardMatching游戏分配04[87470:3734148]等级 CardMatching游戏分配04[87470:3734148]呼叫drawRect CardMatching游戏分配04[87470:3734148]?空

本质上,这告诉我的是调用第一个viewDidLoad。西装和军衔已设置,正如在viewDidLoad中设置一样。然后调用drawRect。现在,当我要求返回西服和等级时,我得到一个空字符串和一个0值整数。我不知道发生了什么,但似乎在viewDidLoad和drawRect之间的某个地方,属性正在丢失

请帮帮我,我对objective-c和xcode还很陌生!非常感谢您的建议


编辑:所以我试着做了一些人们建议的事情,但没有解决问题。以下是一些附加信息:interface builder中的PlayingCardView视图设置为类PlayingCardView。我尝试删除IBOutlet行,并进行另一次ctl+拖动以重新创建IBOutlet。到目前为止还没有任何效果。

这是一个令人讨厌的问题

我认为您有两个PlayingCardView实例:

您的视图已连接到Interface Builder中的IBOutlet 在IB where/中显示相同的视图,因为尚未将类设置为PlayingCardView。 因此,当从IB加载时,drawRect调用实际上发生在IB中的PlayingCardView上,而不是在您正在设置等级和套装的outlet视图上

我猜您可能已经手动编写了IBOutlet行,而不是进行拖动

检查Interface builder中的PlayingCardView视图是否将其类设置为PlayingCardView

然后跑


如果这仍然不起作用,然后从代码和视图检查器中删除IBOutlet行非常重要,然后再次将其拖动到您的PlayingCardGameViewController中。h

您是否在PlayingCardGameViewController.m文件中为playingCardView合成了?愚蠢的问题:您在同一实例中设置的playingCardView实例是否适合和排名什么时候调用drawRect?Priyatham51-我不确定是否遵循。我在PlayingCardGameViewController.m中没有使用@synthesis来播放CardView。我只是把它包括进去,但没用。我不知道我是否明白你的意思。我的playingCardView是一个IBOutlet,它连接到我在故事板中的UIVIew。我在故事板中的UIView是类类型PlayingCardView。我想您可能有两个不同的PlayingCardView实例。interface builder中的PlayingCardView视图设置为类PlayingCardView。我试着像你建议的那样删除IBOutlet行,并执行另一个ctl+拖动来重新创建IBOutlet。我仍然有同样的问题。