【问题标题】:Assign value to NSUInteger in object after init初始化后为对象中的 NSUInteger 赋值
【发布时间】:2014-05-13 16:21:13
【问题描述】:

我有一个 NSObject 的子类。在这个类中,我有一个 NSUInteger 声明如下:

@interface Deck : NSObject

- (id)initDecks:(NSUInteger)decks;
- (Card *)drawCard;

@property (nonatomic, assign) NSUInteger drawnCards;

在我的实现文件中,我有以下代码:

#import "Deck.h"

@implementation Deck

- (id)initDecks:(NSUInteger)decks {
    self = [super init];

    if (self) {
        self.drawnCards = 1;
    }

    return self;
}

- (BJCard *)drawCard {
    self.drawnCards++;
    return nil;
}

init 方法中分配给 NSUInteger (drawnCards) 的编号设置正确,但是,我稍后无法更改。我在 Xcode 中没有收到任何警告或崩溃,但数字保持不变。我试图做 self.drawnCards++ 和 self.drawnCards = 10 等,但没有任何效果。知道我的代码可能有什么问题吗?我正在检查值:

NSLog(@"Value: %tu", self.drawnCards);

【问题讨论】:

标签: ios objective-c nsinteger nsuinteger


【解决方案1】:

我相信这里的问题是objectiveC点语法。因为您正在使用对象执行.,所以这相当于执行[self drawnCards]++ 方法调用。该方法的结果是递增的,而不是 drawCards ivar。要执行您想要的操作,您需要执行 _drawnCards++(直接访问 iVar),或者您需要执行 [self setDrawnCards:self.drawnCards++]

【讨论】:

  • 感谢您的回复。两种方法我都试过了,不幸的是,它只返回初始值。
  • 在这种情况下,可能更明显的是,您没有在增加变量的同一对象上调用 NSLog。要找到问题,我们需要查看更多管理 Deck 对象的代码。
  • 啊,重置模拟器并清理构建文件夹起到了神奇的作用,并结合了您的解决方案。谢谢:)
猜你喜欢
  • 2013-05-07
  • 1970-01-01
  • 2019-11-16
  • 2023-03-23
  • 2017-06-17
  • 1970-01-01
  • 2014-05-25
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多