0

バックグラウンド

私は 2 つの tableViews を持っています。1 つ目はメイン テーブルで、2 つ目はお気に入りテーブルです。

すべてがplistで処理されます。

最初のテーブルの detailView から、上隅にボタンを設定して、値 YES を plist に書き込みます。

plist は次のように構成されています。

Section 1                  Dictionary
      Title                String
      Rows                 Array 
        Item 0             Dictionary
           name            String
           description     String
           image           String
           isFav           Bool (default NO)
      Item 1               Dictionary
           name            String
           description     String
           image           String
           isFav           Bool (default NO)

Section 2
      Title
      Rows
        Item 0             Dictionary
           name            String
           description     String
           image           String
           isFav           Bool (default NO)
        etc..

それがどのように機能するかの小さなスキームを追加します:

firstTable          detailView                          plist
 __________          ________                   
|          |        |     |★ |<- button pressed ---> cellname isFav = YES      
|__________|        |        |               
|cellname  | ------>| detail |    
|__________|        |        |               
|          |        |        |               
|          |        |        |                

問題

そのボタンができたので、isFav ブール値を plist に書き込むメソッドを書き込もうとしていました。

-(void)makeFavorite

plist を読み取る方法は既にありましたが、それに値を書き込む方法がわかりません。Google で検索して、他の stackOverflow の投稿を読んでみましたが、よくわかりません。どんな助けでも大歓迎です!

編集

これは、plistを読み取る方法です

- (NSArray*)readPlist 
{ 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *plistPath = [[documentPaths lastObject] stringByAppendingPathComponent:@"tipsList.plist"]; 

    NSFileManager *fMgr = [NSFileManager defaultManager]; 
    if (![fMgr fileExistsAtPath:plistPath]) { 
        plistPath = [[NSBundle mainBundle] pathForResource:@"tipsList" ofType:@"plist"]; 

    } 
    return [NSArray dictionaryWithContentsOfFile:plistPath];
}

そして、私が入力していた方法で:

- (void) makeFavorite:(id)sender
 {   
     NSArray *test = [self readPlist];
     NSLog (@"test: %@",test);
    //write plist instructions then
 }
4

4 に答える 4

3

何方をお探しですか:

[myDictionary setObject:[NSNumber numberWithBool:NO] forKey:@"isFav"]
于 2012-06-17T09:25:49.493 に答える
2

iOS の NSUserDefault に Bool 値を書き込む

write 
 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"instructionCheck"];


Get
Bool flag=[[NSUserDefaults standardUserDefaults] boolForKey:@"instructionCheck"];
于 2015-09-05T10:19:27.207 に答える
2

概要、特に関連する手順はありません。

変更する場合は、最初に変更可能な辞書が必要です。plist を読み取ると、(明らかに)ditionaryWithContentsOfFile:これを呼び出すと不変のリストが生成されます。NSDictionary

ドキュメントで同じメソッドを呼び出すとNSMutableDictionary、辞書自体は変更可能であることが示唆されますが、含まれるオブジェクトはそうではありません。あなたの場合、配列に埋め込まれた辞書の単一の値を変更したい場合、それ自体が辞書に(少なくとも)埋め込まれます-つまり、可変オブジェクトが必要です。

変更可能なオブジェクトが必要であることを指定できる plist を読み取る方法は他にもあります。プロパティ リスト データの読み取りと書き込みの最初のセクションから始めてください。

次に、変更可能な plist を変更したらsetObject:forKey:、適切なサブ辞書を呼び出すだけです。つまり、外部辞書から配列を取得し、配列から内部辞書を取得してから、キーのオブジェクトを設定します。 .

最後に、それを書き出す必要があります。そのために、ofreadPlistなどのメソッドを使用するyour への補足を記述します。writeToFile:atomically:NSDictionary

于 2012-06-17T10:08:49.410 に答える
0

indexPathから にを渡すことができtableViewますdetailView。作成する

@property (copy) NSIndexPath *indexPath;

あなたの中detailViewでそれを割り当てます

detailView.indexPath = indexPath; // the one from the current selected cell

次に、次のようなお気に入りのメソッドを作成できます。

- (IBAction)makeFavorite 
{ 
    NSArray *plist = [self readPlist]; 
    NSDictionary *theItem = [[[plist objectAtIndex:indexPath.section] valueForKey:@"Rows"] objectAtIndex:indexPath.row];
    // get the current state 
    BOOL fav = [[theItem valueForKey:@"isFav"] boolValue]; 
    // set the opposite of the current value 
    [theItem setValue:[NSNumber numberWithBool:!fav] forKey:@"isFav"]; 

    [self writePlist:plist]; 

    // update the UI, set new image or something
    self.navigationItem.rightBarButtonItem.image = [UIImage imageNamed:(!fav ? @"FullStar.png" : @"EmptyStar.png")];
}
于 2012-06-18T01:08:57.557 に答える