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
相关产品推荐
相关产品推荐

