0

私は次のように読むから読み込もうとしてplistいます

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
    <key>question</key>
    <string>2 + 2 = ?</string>
    <key>A</key>
    <string>2</string>
    <key>B</key>
    <string>4</string>
    <key>C</key>
    <string>3</string>
</dict>
<dict>
    <key>question</key>
    <string>2 + 4 = ?</string>
    <key>A</key>
    <string>3</string>
    <key>B</key>
    <string>6</string>
    <key>C</key>
    <string>9</string>
</dict>
</array>
</plist>

UIButtonが押されたときにViewControllerを更新しようとしていますが、配列からの読み取り中にエラーが発生したようです。配列を間違って作成しました。最初の質問は正常に表示されますが、ボタンを押すとクラッシュします。ブレークポイントは、クラッシュする行が

self.questionasked.text = question [currentQuestion];

これがコードです

- (void)viewDidLoad
{
[super viewDidLoad];
rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]];

currentQuestion = -1;
[self showNextQuestion];
}
 -(void) showNextQuestion{
        currentQuestion++;
    int numItems = [rootArray count];
    NSMutableArray *question = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *A = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *B = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *C = [NSMutableArray arrayWithCapacity:numItems]; 

for (NSDictionary *itemData in rootArray) {
    [question addObject:[itemData objectForKey:@"question"]];
    [A addObject:[itemData objectForKey:@"A"]];
    [B addObject:[itemData objectForKey:@"B"]];
    [C addObject:[itemData objectForKey:@"C"]];

    self.questionasked.text = question[currentQuestion];
    self.answer1.text = A[currentQuestion];
    self.answer2.text = B[currentQuestion];
    self.answer3.text = C[currentQuestion];

    }
}

-(IBAction)nextQ:(UIButton *) sender{

[self showNextQuestion];

 }
4

4 に答える 4

0

最初にplistファイルからデータを取得します。これyourArrayNSArray

yourArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"FileName" ofType:@"plist"]];    

for(int i=0; i < yourArray.count; i++)
{
  NSLog(@"%@",[array objectAtIndex:i] objectForKey:@"question"]);
  NSLog(@"%@",[array objectAtIndex:i] objectForKey:@"A"]);
  NSLog(@"%@",[array objectAtIndex:i] objectForKey:@"B"]);
  NSLog(@"%@",[array objectAtIndex:i] objectForKey:@"C"]);
}

ConsolのOutPut表示。

于 2013-02-25T13:08:22.587 に答える
0

これらのコード行をforループの外に置いてみてください。

self.questionasked.text = question[currentQuestion];
self.answer1.text = A[currentQuestion];
self.answer2.text = B[currentQuestion];
self.answer3.text = C[currentQuestion];
于 2013-02-25T13:10:23.230 に答える
0

使用する場合:

rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]];

autoreleased NSArrayが表示されるので、クラッシュします。次のように変更します。

rootArray = [[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]] retain];

ARCを使用している場合は、次のように使用します。

@property (nonatomic, strong) NSArray *rootArray;

self.rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]];
于 2013-02-25T13:18:03.347 に答える
0

まず最初に、plistを配列にロードする方法を変更する必要があります。これは、自動リリースされるためです。

rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]];

これとともに :

 rootArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"question" ofType:@"plist"]];

クラッシュを引き起こす別のエラーが発生した場合は、showNextQuestionメソッドで次の行を取得する必要があります。

self.questionasked.text = question[currentQuestion];
    self.answer1.text = A[currentQuestion];
    self.answer2.text = B[currentQuestion];
    self.answer3.text = C[currentQuestion];

for文のうち、コードは次のようになります。

-(void) showNextQuestion{
        currentQuestion++;
    int numItems = [rootArray count];
    NSMutableArray *question = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *A = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *B = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *C = [NSMutableArray arrayWithCapacity:numItems]; 

    for (NSDictionary *itemData in rootArray) {
        [question addObject:[itemData objectForKey:@"question"]];
        [A addObject:[itemData objectForKey:@"A"]];
        [B addObject:[itemData objectForKey:@"B"]];
        [C addObject:[itemData objectForKey:@"C"]];

        }
         self.questionasked.text = question[currentQuestion];
        self.answer1.text = A[currentQuestion];
        self.answer2.text = B[currentQuestion];
        self.answer3.text = C[currentQuestion];


    }

幸運を..

于 2013-02-25T14:21:48.607 に答える