You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中实例化KGQuote对象后无法添加至quotesArray,quotesArray始终为nil的求助

解决Objective-C中quotesArray始终为nil的问题

嘿,我来帮你排查这个问题~ 你的代码逻辑本身没大问题,但核心疏漏是没有初始化quotesArray这个可变数组属性。

问题根源

在Objective-C中,像NSMutableArray这类对象类型的属性,默认初始值是nil。当你直接调用[self.quotesArray addObject:]时,本质是给nil发送消息——Objective-C会静默忽略这类操作,不会报错,但也不会真的把对象添加到数组里,所以最后quotesArray还是保持nil状态。

解决方案

1. 先初始化quotesArray

你需要在使用这个数组之前,先把它初始化为NSMutableArray的实例。常见的初始化位置有两个:

  • 如果是自定义类(比如你的KGApp类),可以在类的init方法里初始化:
- (instancetype)init {
    self = [super init];
    if (self) {
        // 直接初始化实例变量,或者用self.quotesArray(如果属性是nonatomic, strong的话)
        _quotesArray = [[NSMutableArray alloc] init];
    }
    return self;
}
  • 如果KGApp是UIViewController子类,也可以在viewDidLoad里初始化:
- (void)viewDidLoad {
    [super viewDidLoad];
    self.quotesArray = [[NSMutableArray alloc] init];
}

2. 增加安全判断(可选但推荐)

为了避免某些行没有正确用/分割(比如字符串格式错误)导致数组越界崩溃,建议在循环里加个判断:

-(void)createArrayOfKGAppQuotes {
    NSArray<NSString *> *quotesArrayTemp = [self.stringOfQuotes componentsSeparatedByString:@"\n"];
    for (NSString *quote in quotesArrayTemp) {
        NSArray *tempQuoteArray = [quote componentsSeparatedByString:@"/"];
        // 确保分割后至少有两个元素,再创建KGQuote对象
        if (tempQuoteArray.count >= 2) {
            KGQuote *newQuote = [[KGQuote alloc] initWithQuote:tempQuoteArray[0] andWithAuthor:tempQuoteArray[1]];
            [self.quotesArray addObject:newQuote];
        }
    }
}

这样修改后,quotesArray就能正常接收KGQuote对象啦~

内容的提问来源于stack exchange,提问作者Kuba Gawecki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:13:15