首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 程序化添加控件到數組後修改屬性不生效:數組未初始化導致存入失效

     編輯:程式設計綜合問答

將動態創建的 UIButton 添加到 NSMutableArray 後,從數組取出修改圖片不生效,原因:_buttons 數組未初始化,addObject: 對 nil 無操作,取出時為 nil。

錯誤代碼

// viewDidLoad 中
for (int i = 0; i < 3; i++) {
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [view addSubview:button];
    [_buttons addObject:button]; // ❌ _buttons 為 nil,調用被忽略
}

// 後續修改
UIButton *button = [_buttons objectAtIndex:0]; // 返回 nil
[button setImage:thumb forState:UIControlStateNormal]; // 無效果

修正:初始化數組

- (void)viewDidLoad {
    [super viewDidLoad];
    _buttons = [NSMutableArray array]; // ✅ 必須初始化
    // 或 @property 宣告時初始化:@property (nonatomic, strong) NSMutableArray *buttons = [NSMutableArray array];
    
    for (int i = 0; i < 3; i++) {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [view addSubview:button];
        [_buttons addObject:button];
    }
}

進階:用 Tag 直接獲取避免數組

// 創建時設置 tag
button.tag = 100 + i;

// 修改時直接從視圖層級查找
UIButton *button = (UIButton *)[self.view viewWithTag:100];
[button setImage:thumb forState:UIControlStateNormal];

核心提示

  • OC 向 nil 發送消息不崩潰但無效果,極易隱藏 Bug。
  • 所有可變容器(Array/Dictionary/Set)使用前必須初始化。
  • 屬性建議在聲明處或 viewDidLoad 統一初始化。

初始化數組,程序化控件管理才可靠。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved