私のiOSアプリケーションでは、ピッカービューとボタンの2つのUIを持っています。NSMutableArrayにNSStringを追加するクラッシュ
私はこのようなNSMutableArrayのと私のピッカービューを初期化:
@interface ViewController()
{
NSMutableArray *_pickerDataCategory;
}
- (void)viewDidLoad
{
// Initialize Data
_pickerDataCategory = [[NSMutableArray alloc] init];
NSMutableArray *array = [NSMutableArray arrayWithObjects:
@"cat1", @"cat2", @"cat3", @"cat4", nil ];
_pickerDataCategory = array;
//First I had initialize like this : NSMutableArray *_pickerDataCategory = [NSMutableArray arrayWithObjects:
@"cat1", @"cat2", @"cat3", @"cat4", nil ];
}
それから私は、ユーザーが何かを書くことができますポップアップを表示するボタンがあります。このメソッドの目的は、NSMutableArrayに新しいNSStringオブジェクトを追加することです。
- (IBAction)addNewCategory:(id)sender {
__block bool isNotExist = false;
UIAlertController * alertController = [UIAlertController alertControllerWithTitle: @"Add new category"
message: @"Please write a new category"
preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"Category";
textField.textColor = [UIColor blueColor];
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
textField.borderStyle = UITextBorderStyleRoundedRect;
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSString *input = alertController.textFields[0].text;
//Check if the category exist already
for (NSString *category in _pickerDataCategory)
{
if ([category isEqualToString:input])
{
[self popupMessage:@"Category already exists" title:@"Error"];
isNotExist = false;
return;
}else{
NSString *msg = [@"Category has been added : " stringByAppendingString:input];
[self popupMessage:msg title:@"Ok"];
isNotExist = true;
//[_pickerDataCategory addObject:input];//CRASH
// [_picker_cateogry reloadAllComponents];
}
}
}];
[alertController addAction:cancel];
[alertController addAction:ok];
[self presentViewController:alertController animated:YES completion:nil];
}
しかし、NSMutableArrayにTextfield入力を追加するときにクラッシュしました。なぜ私は本当に理解していない。 NSMutableArrayの初期化には注意が必要でした。私はそれについてのインターネット上の任意の情報を探し、私が見つけた2つの情報は、初期化についてか、またはそれが可変配列であり、単純な配列ではない場合のいずれかであった。
さらに、私は[self presentViewController:alertController animated:YES completion:nil];
の後にいくつかのコードを追加すると、なぜ実行されないのかわかりません...私はそれについての情報も見つけられませんでした。
なぜクラッシュしたのかわかりません。うまくいかないのですか? ありがとう
あまりにもクラッシュメッセージを追加してください。もう少し簡単に問題を見つけることができます! :) – Rikh
@rikh、はい、忘れました。私は私の投稿を編集する;)ありがとう! – lilouch
配列に 'addObject'を実行しようとしているところにブレークポイントを置き、その値が' nil'ですか? – Rikh