Xcodeのリスト表示と削除方法について

このQ&Aのポイント
  • objective-cを勉強中なのですが、Xcodeでリストをランダムに表示し、選んだ要素を削除するメソッドを作りたいです。しかし、リストを全て選び終わった後にリストを復活させる方法が分かりません。アドバイスをお願いします。
  • Xcodeでリストをランダムに表示し、選んだ要素を削除する方法を教えてください。また、リストを全て選んだ後、リストを復活させる方法も教えてください。
  • Xcodeのobjective-cで、リストをランダムに表示し、選んだ要素を削除するメソッドを作りたいです。しかし、リストを全て選んだ後にリストを復活させる方法が分かりません。アドバイスをお願いします。
回答を見る
  • ベストアンサー

xcodeについてご相談があります。

objective-cを勉強中なのですが、分からない所があります。 (1)作成したリストを、ボタンを押すたびに一つずつランダムに選んでラベルに表示させる (2)同時に、選んだものはリストから削除していく (3)全て(下記の場合は5つ)選び終わったら、リストを完全に復活させる というメソッドを作りたいのですが、(3)の段階を上手く記述できません。 具体的には、if文の条件を上手く設定できません。 どなたかアドバイスを頂けないでしょうか。 以上、何卒宜しくお願い致します。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _lists = [NSMutableArray arrayWithObjects:@"apple",@"bear",@"hand",@"foot",@"sun", nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)btRandom:(id)sender { if (_lists > 0) { self.lbLabel.text = nil; // listからインデックス番号をランダムに選択 unsigned int erabu = arc4random_uniform(_lists.count); NSLog(@"1:%d", erabu); // listからランダムに選択したものを抜き出して文字データにする NSString *nukidasi = [_lists objectAtIndex:erabu]; NSLog(@"2:%@", nukidasi); // ラベルに出力する self.lbLabel.text = nukidasi; // listからランダムに選択して抜き出したもの(erabu)をlistから削除 [_lists removeObjectAtIndex:erabu]; NSLog(@"%@", _lists); }else if (_lists < 0){ _lists = [NSMutableArrayarrayWithObjects:@"apple",@"bear",@"hand",@"foot",@"sun", nil]; } }

noname#213637
noname#213637

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

下から5行目: }else if (_lists < 0){ 変数_listsは、(NSMutableArray *)型のクラスインスタンスを代入しています。(ふつうは、クラスインスタンスなどとごていねいな表現はせず、ただインスタンスとだけ呼びます) 見てのとおりインスタンスはC言語のポインタの形をしているので、その実体は符号なしの整数型です。なので、「_lists < 0」という整数0との比較演算が成り立ちます。おそらくコンパイラの警告も出ていないのではないでしょうか? くり返しますが、ポインタは「符号なしの整数型」なので、負数すなわち0より小さくなることはありません。「_lists < 0」が真になることはぜったいにありません。よって、以降のコードが実行されることもありません。 _list.count < 1 あなたの気持ちは、こう書きたかったのではありませんか? プロパティcountがなにかは、クラスリファレンスでお調べを。 蛇足: 23行目: self.lbLabel.text = nil; できないことはないけど、ふつうはこういうことはしません。 self.iblabel.text = @""; 空行を入れておきます。 そもそもこういう「初期化」自体、不用なんですけどね。

noname#213637
質問者

お礼

上手くいきました! ありがとうございました!

関連するQ&A

  • XcodeのObjective-Cについて

    大変初歩的な質問でお恥ずかしいのですが、最近Xcodeを初めて本で少しずつObjective-Cを勉強中の初心者です。 MainStoryboardでLabelをViewに配置した後、 「画面を表示する準備ができたときにコンソール画面に"こんにちは"と表示させるプログラムを追加」というものが載っているのですが、指示通り打ち込んでもエラーでうまくいきません。 本には「m.」ファイル上の「@implementation」の次の行に 01 - (void)viewDidLoad 02 { 03   [super viewDidLoad]; 04   NSLog(@"こんにちは"); 05 } とあり、その通りに打ち込んだのですが(以下Xcodeよりコピペ) @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"こんにちは"); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } となり、 NSLog(@"こんにちは"); } の次の行の - (void)viewDidLoad に赤い!マークのエラーが表示されてしまいます。 初心者のため訂正方法もわからずネット検索しても解決しなかったので、 大変申し訳ないのですが教えていただきたく思います。

  • swift言語 Xcode

    アプリを作る勉強をしています。参考書通りやりましたが、警告が出てしまいます。 原因がわからず困っています。どなたか助けて頂けませんでしょうか?宜しくお願い致します。 ソースはこちらです。 import UIKit import MapKit class ViewController: UIViewController ,UITextFieldDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. inputText.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var inputText: UITextField! @IBOutlet weak var dispMap: MKMapView! } func textFildShoouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() let searchKeyword = textField.text print(searchKeyword) ⇦ここに警告が出ます。 return true

  • Swiftについて教えてください

    タイマー処理をしようと以下のようにしたのですが、 Cannot invoke 'scheduledTimerWithTimeInterval' with an argument list of type '(Float, target: ViewController, selector: String, userInfo: nil, repeats: Bool)'というエラーがでます。 Floatの部分に直接、小数を記述するとエラーが消えるのですが、self.Intervalなど変数で指定できないのでしょうか? import UIKit class ViewController: UIViewController { // var Interval:Float = 1.0 // var timer = NSTimer() override func viewDidLoad() { super.viewDidLoad() //タイマー開始 self.start() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //スライドショーを開始する func start(){ //タイマー定義 self.timer = NSTimer.scheduledTimerWithTimeInterval(self.Interval, target: self, selector: "next:", userInfo: nil, repeats: true) } //次へ func next(timer:NSTimer){ println("次へ") } }

    • ベストアンサー
    • Swift
  • xcodeで配列を保存する方法を教えてください

    初めまして。 うん十年ぶりにプログラミングに取り組んでいる、ccode初心者です。 ボタンを押すと、その時点の日付を取得して配列として保存するアプリを作っております。 ですが、変数の設定が悪いのか、MutableArray変数(_kitaku)をインスタンス変数で宣言すると、UserDefaultsで読み込んだ際に、読み込んだデータを取り込むことが出来ず、 ローカル変数で宣言すると、取得した日付を配列として保持することが出来ません。 おそらく変数の宣言の仕方かと思いますが、 どなたか、解決策を教えていただければ幸いです。 ちなみに、現在作成中のコードは下記の通りとなります。 よろしくお願いいたします。 ----- #import "OWBViewController.h" @interface OWBViewController () { //配列宣言 NSMutableArray *_kitaku; } //帰宅時間を取得するボタン @property (weak, nonatomic) IBOutlet UIButton *GetTime; //帰宅時間を取得するメソッド - (IBAction)GetTime:(id)sender; //時刻を保存するメソッド - (void)saveTime; @end @implementation OWBViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 保存した時間を読み込む NSUserDefaults *Rireki = [NSUserDefaults standardUserDefaults]; NSMutableArray *_kitaku = [Rireki objectForKey:@"kitaku"]; // ブレークポイント NSLog(@"過去結果配列 %@",_kitaku); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)saveTime { //保存 NSUserDefaults *Rireki = [NSUserDefaults standardUserDefaults]; [Rireki setObject:_kitaku forKey:@"kitaku"]; BOOL successful = [Rireki synchronize]; if (successful) { NSLog(@"%@", @"データの保存に成功しました。"); } } - (IBAction)GetTime:(id)sender { //NSMutableArray *_kitaku; NSDate *kitaku = [NSDate date]; if(!_kitaku){ _kitaku = [[NSMutableArray alloc] init]; } [_kitaku insertObject:kitaku atIndex:0]; NSLog(@"帰宅時間 %@", kitaku); NSLog(@"帰宅時間配列 %@", _kitaku); [self saveTime]; } @end

  • iPhoneアプリ作成時のXcodeのエラー

    はじめまして。 iPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後から4行目【UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【No visible @interface for 'NSDictionary' declares the selector 'objectForkey'】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [[self presentViewController:picker animated:YES completion:nil];} - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissViewControllerAnimated:YES completion:nil]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; // ↑↑ 上記の行でエラーが出ます self.imageView.image = originalImage; } @end

  • objectiv-cで困っています。教えてください

    objectiv-cの勉強を始めたばかりです。ネットで調べながら進めているのですが、プロジェクト内のテキストファイルではなく、サーバにあるテキストファイルの内容を読み込み、NSLogに出力しようとしているのですが、うまくいきません。xxxxxxxxxxxの部分にテキストファイルのあるURLを入れています。 -----------------textloadViewController.h------------------------------ #import <UIKit/UIKit.h> @interface textloadViewController : UIViewController @end -----------------textloadViewController.m------------------------------ #import "textloadViewController.h" @interface textloadViewController () @end @implementation textloadViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. NSError *error = nil; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"xxxxxxxxxxx" ofType:@"txt"]; NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; NSLog(@"%@", string); } @end 外部のテキストファイルを読み込む方法を教えてください。よろしくお願いします。

  • iOSシュミレーターで表示されません

    iOSのプログラミングを始めたばかりの者です。 本を読み、下記の通りにプログラミングをしましたが、iOSシュミレータで全く表示されません。 どうしてなのか、お知恵を拝借出来ませんでしょうか? XCodeは、4.6.3で、MacBookは10.8.5です。 宜しくお願い申し上げます。 -------------------------------------------------------------------------------------------------------- #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"Hello,World!"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

    • ベストアンサー
    • Mac
  • Xcode4のエラー(IPhoneアプリ)

    はじめまして。 IPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後2行【UIImage *originalImage =[info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【’dismissModalViewControllerAnimated’is deprecated: first deprecated in iOS 6.0】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissModalViewControllerAnimated:YES]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; self.imageView.image = originalImage; } @end

  • xcode 画像をランダムに並べ順番に押す

    初めてですが質問よろしくお願いします。 iphone開発初心者です。 数字の画像をランダムに5×5に並べ、1から25まで順番に押していく、 というアプリを制作中なのですが行き詰まっています。 現在下記コードのようになっています。 画像を表示まではできたのですが、下記3つ、できればソースコードをお聞きしたいです。 (1)画像25個をランダムに表示する記述がわかりません (今はとりあえずで同じ画像を1つ入れてます。(img1~img25のimg1を代入中)) (2)順番に押していく処理 (3)画像を押された時に音を出したい - (IBAction)image:(id)sender { AudioServicesPlaySystemSound(sound_1); } の部分をうまく入れこめばいいのかと思っていますが、その入れこみ方もわかりません。 AudioToolboxは追加済みです。 どなたかご教授よろしくお願いします。 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString *path = [[NSBundle mainBundle] pathForResource:@"btn_1" ofType:@"mp3"]; NSURL *url = [NSURL fileURLWithPath:path]; AudioServicesCreateSystemSoundID((CFURLRef)CFBridgingRetain(url), &sound_1); int yo = 5; for(int i = 0;i<yo; i++){ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*i, 100, 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } int f = 25; for(int i = 0;i<f; i++){ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } int rand = arc4random()%f; for(int i = 0; i<f; i++){ if(i == rand){ UIButton*button = [UIButton new]; button.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); [button setImage:[UIImage imageNamed:@"img1.png"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:button]; }else{ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } } } - (IBAction)image:(id)sender { AudioServicesPlaySystemSound(sound_1); } -(void)buttonTapped{ } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

  • ios/バックグラウンドからループを呼び出したとき

    objective-cで、バックグラウンドに入ったときに、for文のあるメソッドを呼び出したところ、ループが終わると画面が黒くなってしまいます。落ちてはいないです。どうなっているんでしょうか? 以下が実際のソースです - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test) name:UIApplicationDidEnterBackgroundNotification object:nil]; } -(void)test{ for (int i; i < 5; i++) { NSLog(@"%d", i); [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]]; } }

専門家に質問してみよう