2012-01-08 15 views
-3

こんにちは私は、iOS 4.3.3で、ダウンロードされたXcode 4.2.1とiOS sdk 5よりもアプリを作成しました。これはナビゲーションベースのアプリケーションで、tableviewの可変配列を持っています配列の文字列を作成しないでください。オブジェクトをviewdidloadの配列に追加しましたが、動作しません!だから、私の配列内のオブジェクトにNSlogを追加し、nullと言う!私は何をすべきか?ここでiOS 5 sdkの変更可能な配列の問題

は、のviewDidLoadです:

- (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
    self.soldc = [NSMutableArray arrayWithCapacity:0]; 
    self.color = [NSMutableArray arrayWithCapacity:0]; 
    appdelegate = (yard_sale_managerAppDelegate *)[[UIApplication sharedApplication]   delegate]; 
    appdelegate.object = self; 
    NSMutableArray *loadi = [[NSMutableArray alloc]initWithCapacity:0]; 
    self.items = loadi; 
    self.sold = [NSMutableArray arrayWithCapacity:0]; 
    self.prices = [NSMutableArray arrayWithCapacity:0]; 

    alert = [[UIAlertView alloc] initWithTitle:@"Add product" message:@"Enter your product name and price." delegate:self cancelButtonTitle:@"Add" otherButtonTitles:@"Cancel", nil]; 
    [alert addTextFieldWithValue:@"" label:@"name"]; 
    [alert addTextFieldWithValue:@"" label:@"price"]; 
    add = [alert textFieldAtIndex:0]; 
    add.keyboardType = UIKeyboardTypeAlphabet; 
    add.keyboardAppearance = UIKeyboardAppearanceAlert; 
    add.autocapitalizationType = UITextAutocapitalizationTypeWords; 
    add.autocorrectionType = UITextAutocorrectionTypeNo; 
    add2 = [alert textFieldAtIndex:1]; 
    add2.keyboardType = UIKeyboardTypeNumberPad; 
    add2.keyboardAppearance = UIKeyboardAppearanceAlert; 
    add2.autocapitalizationType = UITextAutocapitalizationTypeWords; 
    add2.autocorrectionType = UITextAutocorrectionTypeNo; 
    NSLog(@"%i", [color count]); 
    alert.tag=1; 
    self.resa = [[UIAlertView alloc] initWithTitle:@"Sale results" message:@"temple" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil]; 
    self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 
    self.prices = [NSMutableArray arrayWithContentsOfFile:[self pricesp]]; 
    self.sold = [NSMutableArray arrayWithContentsOfFile:[self soldp]]; 
    self.soldc = [NSMutableArray arrayWithContentsOfFile:[self soldcp]]; 
    self.color = [NSMutableArray arrayWithContentsOfFile:[self colorsp]]; 
    if ([self.soldc count]==0) { 

    } 
    //self.soldc = [NSMutableArray arrayWithContentsOfFile:[self soldcp]]; 
    self.color = [NSMutableArray arrayWithContentsOfFile:[self colorsp]]; 
    [loadi release]; 
    self.resa.tag = 2; 
    [self.items addObject:@"chair"]; 
    [self.prices addObject:@"30"]; 
    [self.color addObject:@"0"]; 
    NSLog(@"%@",self.items); 
} 

あなたが私に言うより多くの情報が必要な場合は! これはログです:

2012-01-08 21:31:13.409 yard sale manager[1152:f803] 0 
2012-01-08 21:31:13.411 yard sale manager[1152:f803] (null) 

編集:その重要これを読ん!!!!! 多くの人がそのコードに気付かなかった: [self.items addObject:@ "chair"];
[self.prices addObject:@ "30"]; [self.color addObject:@ "0"]; NSLog(@ "%@"、self.items);

+2

あなたは、あなたがしていることをかなり控えめに考えているわけではありません。 'viewDidLoad'の最後にフィールドを更新するのは何が良いのでしょうか?そして、あなたは 'arrayWithContentsOfFile'がnilを返すことができると思いますか? itemsp { NSStringの*パス= [NSStringのstringWithFormat(NSStringの*) - :@ "%@%@"、[[NSBundle mainBundle] resourcePath]、@ –

答えて

1

このライン

self.color = [NSMutableArray arrayWithCapacity:0]; 

は空の配列をインスタンス化して割り当てられ、あなたはその後、したがって、それに0数を何も追加しないでください。そして、このライン

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

はおそらく原因です。 [self itemsp]は、NSArrayに解析できるファイルを指す有効なファイルパスを返しますか?

このコードには他にも多くの問題があります。


更新

このライン

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

nilを返すする必要があります。まっすぐにした後、この行を追加することにより

確認

NSLog(@"%@", self.items); 

は、どのように私はあなたが(null)を得ているので、この仮定

が、私はこの仮定を作っていた理由があることを確認することができます。 niladdObject:と電話するとnilが返され、それはノーオペレーションです。 myArrayNSMutableArrayへのポインタを保持している

NSMutableArray *myArray = nil; 

[myArray addObject:@"Test"]; 

NSLog(@"%@", myArray); 

// => 2012-01-08 20:54:04.708 Untitled[4199:707] (null) 

という理由だけで、あなたがこのスニペットからわかるように、それはあなたが実際には1つを持っていることを意味するものではありません。

したがって、あなたがself.itemsに割り当てる最後の時間である:

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

[NSMutableArray arrayWithContentsOfFile:[self itemsp]]self.items NSMutableArrayのは作成されないことを、次の(null)NSLog(@"%@",self.items);版画ことを考えるとnil

+0

私はあなたのコードのその部分だけを告げ、パスがあります"items.plist"]; と私は後で色を追加し、それは追加されません... それは私の質問を追加しません何が必要な場合は、私はそれを投稿します多くの情報が必要な場合は、配列と間違っている – Matan

+0

実際に有効なパスが返されているかどうか、またファイルがNSArrayに解析できるかどうかは答えません。 –

+0

はい、それは です[self.items writeToFile:[self itemsp] atomically:YES];そのバックアップシステム – Matan

0

を返していることを意味します。起こる可能性のある唯一の方法は、パスに何もないため、おそらく何も読み取られないため、

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

がnilを返します。

右の文の後のNSLog self.items:あなたは動作しませんアプリケーションバンドルに書き込みをしようとしている場合

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

、あなたは、このようなサンドボックスDocumentsディレクトリとしてディレクトリを作成する必要があります。

+0

そのパスが私はそれを知っている私は5から私が保存されたコードで追加されていないいくつかのオブジェクトを入力する4.3からシミュレータを変更するためそのパスにあるファイル。その行がなぜ機能しないのかというよりパスが間違っていると言うことができます:[self.items addObject:@ "chair"]; NSlogの直上にあるオブジェクトは追加されません。 – Matan

+2

NSLogから何を入手しましたか**私は**機器に**を提案しましたか?基本的には、あなたのコードが正しいと主張していると同時に、それが動作していないと同時に、両方の引数が正しいことはできません。 – zaph

+0

私はまだヌルになっています。コードはios5と互換性がないとしか言​​えません。それ以上のアイデアはありますか? – Matan

関連する問題