入門 iOS 開発コース (約 50) の最終プロジェクトの複数のビューで文字列と整数を共有しようとしていますが、これをどのように行うのか疑問に思っています... MVC パラダイムが最適であることはわかっていますが、私たちはそうしませんでした。非常に高度なもの、特にコアデータに到達できません。私は NSUserDefaults を使用することを考えていました。それが間違っていることはわかっていますが、このアプリは非常に高速である必要はありません。これが私にとって最も簡単な方法だと思います。私の質問は、使用する NSUserDefault オブジェクトをどこでどのように宣言するのでしょうか? クラスで使用したのは、1 つのビューだけでした。ロードされた最初のビューで宣言すると、他のビューでアクセスできることがわかりますが、最初のビューのヘッダーファイルを他のビューのそれぞれにインポートする必要がありますか、それともアクセスできますか?
アップデート
NSUserDefaults
そこで、すべての にプロパティを作成して、物事を簡単にしようと考えましたViewControllers
。次に、値を取得するために、NSUserDefaults (プロパティViewControllers
も持つ) に格納されているデータにアクセスする必要があるビューに、それぞれのヘッダーを実装しました。NSUserDefault
その画面に到達し、何も更新されないまで、アプリは素晴らしく動作します。私の間違いは、私が実装した方法のどこかにあると確信しています NSUserDefaults
しかし、私はそれを正しく行う方法がわかりません。クラスでそれらを調べたとき(実際には、「Sam's Teach Yourself iPhone Application Development in 24 Hrs」(吐く、それは私を怒らせます)の直接研究です)、それらを使用したのは単一のビューアプリケーションでのみでした。白い背景のアルファなので、フラッシュ ライトとして使用できます。これはそれが提示された方法です:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger: var forKey: kVar];
[userDefaults synchronize];
これは私が自分のアプリで試みていたことです:
ViewController.h
各ビューの私のファイルでは:
...
@interface AppetizerViewController : UIViewController{
NSUserDefaults *userDefaults;
...
}
@property(assign)NSUserDefaults *userDefaults;
userDefaults
次に、ボタンをクリックしたときに、その値を次の場所に保存したいと思いました。
-(IBAction)plusEgg:(id)sender{
eggs++;
eggString = [NSString stringWithFormat:@"%d",eggs];
eggQty.text = eggString;
eggOrderedQty.text = eggString;
[userDefaults setInteger:eggs forKey:kEggQty];
[userDefaults synchronize];
[self updateAppSubtotal];
}
-(IBAction)minusEgg:(id)sender{
eggs--;
if(eggs < 0){
eggs = 0;
}
eggString = [NSString stringWithFormat:@"%d",eggs];
eggQty.text = eggString;
eggOrderedQty.text = eggString;
[userDefaults setInteger:eggs forKey:kEggQty];
[userDefaults synchronize];
[self updateAppSubtotal];
}
次に、すべてのビューのヘッダー ファイルにすべての定数があるため、NSUserDefault Keys
すべてのヘッダー ファイルをこのBillViewController
ように実装し、次のようにアクセスしようとしました。
-(void)populateLabels{
pieFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kPieQty]];
hazFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kHazQty]];
briFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kBriQty]];
choFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kChoQty]];
iceFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kIceQty]];
}
-(void)getSubtotal{
NSString *preSubString;
NSString *subString;
subFloat = [userDefaults floatForKey:kAppSub]+[userDefaults floatForKey:kBevSub]+
[userDefaults floatForKey:kDesSub]+
[userDefaults floatForKey:kEntSub]+[userDefaults floatForKey:kSidSub];
if(subFloat < 10){
preSubString = [[NSString alloc]initWithFormat:@"%1.2f",subFloat];
}else if(subFloat < 100 && subFloat >= 10){
preSubString = [[NSString alloc]initWithFormat:@"%2.2f",subFloat];
}else if(subFloat < 1000 && subFloat >= 100){
preSubString = [[NSString alloc]initWithFormat:@"%3.2f",subFloat];
}else{
preSubString = [[NSString alloc]initWithFormat:@"%4.2f",subFloat];
}
subString = [[NSString alloc]initWithFormat:@"$%@",preSubString];
billSubtotal.text = subString;
[preSubString release];
[subString release];
}
皆さんが私に説明しようとしたことは明らかに私の頭の中で完全に理解できなかったことと、私の命名規則がちょっとおかしいことを申し訳ありませんが、私はこれにほとんど休憩を挟まずに約 15 時間続けて取り組んできました。ここミネソタでは午前 4 時頃です。これについてどうすればよいですか?実装方法を明示する必要があるかもしれないことも申し訳ありません。