5710


iPhoneアプリ作成中です。  
plistを呼び出す際に、タップした画像ごとに別のplistを呼び出させて、plistの中身をtableViewで  
表示させようとしています。条件と手順は以下の通りです。

・画像（名前：photo01〜10)と、plist(名前：photo01〜10)を用意します。  
・画像photo01〜10は、Aisatuクラスにコレクションビューで並べてあります。  
・タップした画像の名前を取得して、取得した画像の名前と同じ名前の  
plistを呼び出そうとしています。

そこで、

[code]

    // 上のクラス（Aisatuクラス)のインスタンスを取得する
    NSUInteger idx = [[self.navigationController viewControllers] indexOfObject: self] - 1;
    Aisatu *masterVC = [[self.navigationController viewControllers] objectAtIndex: idx];
    
    
    // タップした画像のインデックスを算出する※detailItemの型はid型です。
    NSUInteger nextImageIdx = [masterVC.photos[0] indexOfObject: self.detailItem];
    
    NSString *st=[[NSString alloc] initWithFormat:@"%lu",(unsigned long)nextImageIdx];
    
    
    NSString* dataFile = [[NSBundle mainBundle]pathForResource:st
                                                        ofType:@"plist"];
    arrayList = [NSArray arrayWithContentsOfFile:dataFile];
    
[/code]

と書いてみたのですが、うまくいきません。

NSUInteger nextImageIdx = [masterVC.photos[0] indexOfObject: self.detailItem];  
のところがうまくいっていないようなのですが、原因がわかりません。

どのようにすれば良いのかご教示いただけないでしょうか。  
以上、何卒よろしくお願いいたします。


CC BY-SA 3.0
2015-02-01T12:02:26.880
5699
2015-02-01T16:31:37.457
2015-02-01T13:02:21.873
7470
7470
question
objective-c iphone ios8
呼び出したいplistの名前の部分を動的に決めさせたい

[code]

    NSString* dataFile = [[NSBundle mainBundle]pathForResource:name
                                                    ofType:@"plist"];
    
[/code]

で、いけるでしょ。nameを、あなたが、正しく提供できるならば。


CC BY-SA 3.0
2015-02-01T12:06:32.203
5701
2015-02-01T12:06:32.203
75
5699
answer


> NSUInteger nextImageIdx = [masterVC.photos[0] indexOfObject:  
>  self.detailItem]; のところがうまくいっていないようなのですが、原因がわかりません。

「うまくいって」いるかどうかは、NSLog()で出力すれば、すぐにわかります。

[code]

    NSLog(@"nextImageIdx = %lu", nextImageIdx);
    
[/code]

Property Listのファイル名が、「photo01.plist」、「photo02.plist」……となっているのなら、

[code]

    NSString *st=[[NSString alloc] initWithFormat:@"photo%02lu",(unsigned long)nextImageIdx];
    
    
    NSString* dataFile = [[NSBundle mainBundle]pathForResource:st
                                                        ofType:@"plist"];
    
[/code]

こうなると思います。NSLog()や、NSStringのメソッド「stringWithFormat:」の変換記号（%luなど）の仕様は、C言語のprintf()に準じます。空き桁を0で埋め、2桁で出力するオプションは「%02lu」となります。


CC BY-SA 3.0
2015-02-01T16:31:37.457
5710
2015-02-01T16:31:37.457
7362
5699
answer