Intereting Posts
RCTBridge – это всегда ниль ошибка при использовании метода класса в родовом классе с тем же именем, что и не общий суперкласс Правильная графика для семейства устройств iOS Как использовать жест панорамы для поворота камеры в SceneKit с использованием кватернионов Анимация UIView задерживается Программно-ориентированное программирование, неявно вызывающий метод расширения UIDocumentInteractionController не сможет открыть документ в Ibook NSInternalInconsistencyException ошибка регистрации собственной ячейки (ios, swift) Хороший способ программирования приложений Android и IOS? iOS – фильтровать массив объектов, который содержит только сегодняшнюю дату Динамически добавлять схему URL в IOS Обрезать изображение при рисовании линии рукой Любое обходное решение для разных ограничений для одного класса? Очень странная позиция позиции UIView Swift: изменение высоты строки UITableViewCell с UIWebView внутри нее

Заменить массив объектов NS с помощью plist

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

В объекте-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. Любая помощь будет очень оценена!

Спасибо!

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

 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 :.

Выберите «Проект», «Перейти к файлу» -> «NewFile» -> «Выбрать ресурс» -> «Выбрать пласт». Дайте имя и нажмите «ОК». Теперь добавьте данные в свой слой.

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

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

Используйте этот массив, где захотите.