2013-12-03 4 views
2

Это мой первый пост, поэтому я приношу свои извинения, если я пропустил руководство или два. Не стесняйтесь звонить мне. В любом случае. В настоящее время я медленно пытаюсь научиться объективным c и iOS/xcode, и, как таковой, я занимаюсь тонны учебников. Я наткнулся на одного и работал над ним, но хотел попытаться бросить вызов себе и сделать некоторые хитрости. В конечном итоге это процесс обучения. Поэтому мой основной вопрос заключается в следующем:Заменить массив объектов NS с помощью plist

В объективе-C с использованием Xcode, как заменить пользовательский класс NSObjects на plist?

Вот фрагмент кода, который я пытаюсь выяснить, как заменить с PLIST, который имеет ту же информацию:

@implementation RecipeBookViewController { 
    NSArray *recipes; 
} 

@synthesize tableView = _tableView; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Initialize table data 
// recipes = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil]; 

    Recipe *recipe1 = [Recipe new]; 
    recipe1.name = @"Egg Benedict"; 
    recipe1.prepTime = @"30 min"; 
    recipe1.imageFile = @"egg_benedict.jpg"; 
    recipe1.ingredients = [NSArray arrayWithObjects:@"2 fresh English muffins", @"4 eggs", @"4 rashers of back bacon", @"2 egg yolks", @"1 tbsp of lemon juice", @"125 g of butter", @"salt and pepper", nil]; 

    Recipe *recipe2 = [Recipe new]; 
    recipe2.name = @"Mushroom Risotto"; 
    recipe2.prepTime = @"30 min"; 
    recipe2.imageFile = @"mushroom_risotto.jpg"; 
    recipe2.ingredients = [NSArray arrayWithObjects:@"1 tbsp dried porcini mushrooms", @"2 tbsp olive oil", @"1 onion, chopped", @"2 garlic cloves", @"350g/12oz arborio rice", @"1.2 litres/2 pints hot vegetable stock", @"salt and pepper", @"25g/1oz butter", nil]; 

    Recipe *recipe3 = [Recipe new]; 
    recipe3.name = @"Full Breakfast"; 
    recipe3.prepTime = @"20 min"; 
    recipe3.imageFile = @"full_breakfast.jpg"; 
    recipe3.ingredients = [NSArray arrayWithObjects:@"2 sausages", @"100 grams of mushrooms", @"2 rashers of bacon", @"2 eggs", @"150 grams of baked beans", @"Vegetable oil", nil]; 

    Recipe *recipe4 = [Recipe new]; 
    recipe4.name = @"Hamburger"; 
    recipe4.prepTime = @"30 min"; 
    recipe4.imageFile = @"hamburger.jpg"; 
    recipe4.ingredients = [NSArray arrayWithObjects:@"400g of ground beef", @"1/4 onion (minced)", @"1 tbsp butter", @"hamburger bun", @"1 teaspoon dry mustard", @"Salt and pepper", nil]; 

    Recipe *recipe5 = [Recipe new]; 
    recipe5.name = @"Ham and Egg Sandwich"; 
    recipe5.prepTime = @"10 min"; 
    recipe5.imageFile = @"ham_and_egg_sandwich.jpg"; 
    recipe5.ingredients = [NSArray arrayWithObjects:@"1 unsliced loaf (1 pound) French bread", @"4 tablespoons butter", @"2 tablespoons mayonnaise", @"8 thin slices deli ham", @"1 large tomato, sliced", @"1 small onion", @"8 eggs", @"8 slices cheddar cheese", nil]; 

    Recipe *recipe6 = [Recipe new]; 
    recipe6.name = @"Creme Brelee"; 
    recipe6.prepTime = @"1 hour"; 
    recipe6.imageFile = @"creme_brelee.jpg"; 
    recipe6.ingredients = [NSArray arrayWithObjects:@"1 quart heavy cream", @"1 vanilla bean, split and scraped", @"1 cup vanilla sugar", @"6 large egg yolks", @"2 quarts hot water", nil]; 

    Recipe *recipe7 = [Recipe new]; 
    recipe7.name = @"White Chocolate Donut"; 
    recipe7.prepTime = @"45 min"; 
    recipe7.imageFile = @"white_chocolate_donut.jpg"; 
    recipe7.ingredients = [NSArray arrayWithObjects:@"3 1/4 cups flour", @"2 teaspoons baking powder", @"1/4 teaspoon salt", @"2 beaten eggs", @"2/3 cup sugar", @"2 ounces melted white chocolate", @"1/2 cup milk", nil]; 

    Recipe *recipe8 = [Recipe new]; 
    recipe8.name = @"White Chocolate Mocha"; 
    recipe8.prepTime = @"5 min"; 
    recipe8.imageFile = @"starbucks_coffee.jpg"; 
    recipe8.ingredients = [NSArray arrayWithObjects:@"2/3 cup whole milk", @"6 tablespoons white chocolate chips", @"coffee", @"whipped cream", nil]; 

    Recipe *recipe9 = [Recipe new]; 
    recipe9.name = @"Vegetable Curry"; 
    recipe9.prepTime = @"30 min"; 
    recipe9.imageFile = @"vegetable_curry.jpg"; 
    recipe9.ingredients = [NSArray arrayWithObjects:@"1 tablespoon olive oil", @"1 onion, chopped", @"2 cloves garlic", @"2 1/2 tablespoons curry powder", @"2 quarts hot water", nil]; 

    Recipe *recipe10 = [Recipe new]; 
    recipe10.name = @"Instant Noodle with Egg"; 
    recipe10.prepTime = @"8 min"; 
    recipe10.imageFile = @"instant_noodle_with_egg.jpg"; 
    recipe10.ingredients = [NSArray arrayWithObjects:@"1 pack of Instant Noodle", @"2 eggs", nil]; 

    Recipe *recipe11 = [Recipe new]; 
    recipe11.name = @"Noodle with BBQ Pork"; 
    recipe11.prepTime = @"20 min"; 
    recipe11.imageFile = @"noodle_with_bbq_pork.jpg"; 
    recipe11.ingredients = [NSArray arrayWithObjects:@"1 pack of Instant Noodle", @"BBQ pork", @"Salt and Pepper", nil]; 

    Recipe *recipe12 = [Recipe new]; 
    recipe12.name = @"Japanese Noodle with Pork"; 
    recipe12.prepTime = @"20 min"; 
    recipe12.imageFile = @"japanese_noodle_with_pork.jpg"; 
    recipe12.ingredients = [NSArray arrayWithObjects:@"1 pack of Japanese Noodle", @"2 green onions", @"2 garlic cloves, minced", @"4 boneless pork loin chops", nil]; 

    Recipe *recipe13 = [Recipe new]; 
    recipe13.name = @"Green Tea"; 
    recipe13.prepTime = @"5 min"; 
    recipe13.imageFile = @"green_tea.jpg"; 
    recipe13.ingredients = [NSArray arrayWithObjects:@"Green tea", nil]; 

    Recipe *recipe14 = [Recipe new]; 
    recipe14.name = @"Thai Shrimp Cake"; 
    recipe14.prepTime = @"1.5 hours"; 
    recipe14.imageFile = @"thai_shrimp_cake.jpg"; 
    recipe14.ingredients = [NSArray arrayWithObjects:@"8 oz (250g) peeled and deveined raw shrimp", @"2 tablespoons red curry paste", @"1 large egg", @"2 teaspoon fish sauce", @"1 tablespoon sugar", @"2 tablespoons coconut milk", @"2 tablespoons roughly chopped Thai basil leaves", nil]; 

    Recipe *recipe15 = [Recipe new]; 
    recipe15.name = @"Angry Birds Cake"; 
    recipe15.prepTime = @"4 hours"; 
    recipe15.imageFile = @"angry_birds_cake.jpg"; 
    recipe15.ingredients = [NSArray arrayWithObjects:@"12 tablespoons (1 1/2 sticks) unsalted butter", @"2 1/2 cups all-purpose flour", @"1 tablespoon baking powder", @"1 teaspoon salt", @"1 3/4 cups sugar", @"2 large eggs, plus 3 large egg yolks", @"1 cup of milk", nil]; 

    Recipe *recipe16 = [Recipe new]; 
    recipe16.name = @"Ham and Cheese Panini"; 
    recipe16.prepTime = @"10 min"; 
    recipe16.imageFile = @"ham_and_cheese_panini.jpg"; 
    recipe16.ingredients = [NSArray arrayWithObjects:@"2 tablespoons unsalted butter", @"4 cups thinly sliced shallots", @"2 teaspoons fresh thyme", @"1/4 cup grainy Dijon mustard", @"8 slices rustic white bread", @"8 slices Gruyere cheese", @"8 ounces sliced cooked ham", nil]; 

    recipes = [NSArray arrayWithObjects:recipe1, recipe2, recipe3, recipe4, recipe5, recipe6, recipe7, recipe8, recipe9, recipe10, recipe11, recipe12, recipe13, recipe14, recipe15, recipe16, nil]; 
} 

он также ссылающийся на заказ класса Recipe.h и Recipe.m с кодом следующим образом:

recipe.h

#import <Foundation/Foundation.h> 

@interface Recipe : NSObject 

@property (nonatomic, strong) NSString *name; // name of recipe 
@property (nonatomic, strong) NSString *prepTime; // preparation time 
@property (nonatomic, strong) NSString *imageFile; // image filename of recipe 
@property (nonatomic, strong) NSArray *ingredients; // ingredients 

@end 

Recipe.m

#import "Recipe.h" 

@implementation Recipe 

@synthesize name; 
@synthesize prepTime; 
@synthesize imageFile; 
@synthesize ingredients; 

@end 

Я честно не уверен, что даже это возможно сделать, однако я бы хотел, чтобы вся эта информация в plist была легко редактируемой, вместо того, чтобы иметь неуклюжий код непосредственно в одном из файлов .m , Любая помощь будет очень оценена!

Спасибо!

+0

Это может помочь вам-> http://stackoverflow.com/questions/6569207/write-custom-object-to-plist-in-cocoa – Vizllx

+0

Я не обязательно хочу читать/записывать данные на plist файл, я просто хочу заменить данные файлом plist. Это возможно? – spoons55

+0

Я не уверен, что понимаю, что вы пытаетесь выполнить, переместив эти данные в plist. Где вы говорите об изменении этой информации? Не из приложения? Непосредственно с помощью редактора plist? – rdelmar

ответ

0

Поскольку все ваши свойства являются объектами списка свойств (строки и массивы), вы можете конвертировать объекты в массив словарей. Просто перебрать рецепты, и создать словарь из каждого объекта:

NSMutableArray *recipeArray = [NSMutableArray new]; 

For (Recipe *obj in recipes) { 
    NSMutableDictionary *dict = [NSMutableDictionary new]; 
    [dict setObject:obj.name forKey:@"name"]; 
    [dict setObject:obj.prepTime forKey:@"prepTime"]; 
    [dict setObject:obj.imageFile forKey:@"imageFile"]; 
    [dict setObject:obj.ingredients forKey:@"ingredients"]; 
    [recipeArray addObject:dict]; 
} 

Это даст вам множество словарей, которые будут содержать ту же информацию, как ваши объекты. Вы можете записать это в файл plist с помощью метода array writeToURL: atomically :.

0

Выбрать проект, перейти к файлу -> NewFile -> Выбрать ресурс -> Выбрать Plist Дать некоторое имя & Нажмите Ok. Теперь добавьте данные в свой слой.

использовать следующий код:

dataArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"your Plistname" ofType:@"plist"]]; 

Используйте этот массив, в котором вы хотите.

+0

потрясающий!Не могли бы вы быть более конкретными, как это работает с моими данными именно с точки зрения ссылок на него и т. Д.? – spoons55

Смежные вопросы