2013-07-30 3 views
-1

Я пытаюсь заполнить свой массив, используя Plist. Это мой файл plist, Menu.plist.Не удалось заполнить массив с помощью plist

-Пункт 0, тип: словарь, значение (1 пункт) - Название, строка Контакты

-Пункт 1, тип: словарь, значение (1 пункт) - название, строка, редактировать

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Menu" ofType:@"plist"]; 
     self.menuArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 


    } 

Я пытаюсь заполнить мой вид таблицы с клеточными контактами и Edit, но мой menuArray не получает загружен, я проверил с NSLog и * PLIST становится путем, но в self.menuArray его все еще показывает 0 объекты, пока это должно быть 2. Я сделал это раньше, и он отлично работал, я не знаю, что сегодня не так. Какие-либо предложения???

+0

Если вы посмотрите на файл Plist, он должен быть NSDictionary не NSArray – Injectios

+0

Показать фактический текст Plist и проверить это добавляется к цели (так копируется в приложение). – Wain

+1

Вы можете вставить содержимое в plist? – Tendulkar

ответ

3

По вашему вопросу содержание PLIST выглядит следующим образом

Plist created through XCode

Формат XML

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>Title</key> 
     <string>Contact</string> 
    </dict> 
    <dict> 
     <key>Title</key> 
     <string>Edit</string> 
    </dict> 
</array> 
</plist> 

Если это так попробуйте сделать следующее

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Menu" ofType:@"plist"]; 
NSArray *menuDataArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

NSLog(@"Plist Content Array = %@", menuDataArray); 

Выходной

Plist Content Array = (
     { 
     Title = Contact; 
    }, 
     { 
     Title = Edit; 
    } 
) 

Примечание:

  • Пожалуйста, проверьте вашу структуру Plist.
  • Array alloc-init.
0

Попробуйте

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     self.menuArray=[[NSMutableArray alloc]init]; 
     NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Menu" ofType:@"plist"]; 
     self.menuArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 


    } 

вы должны Alloc NSMutableArray.

+0

Пробовал выделение alloc NSMutableArray, но не работал, menuArray.count все еще возвращает 0 объектов.Я проверил одну из моих старых программ, и тот же код отлично работает там, что было сделано без использования ARC, этот проект использует ARC, не имеет значения, если это так, какие изменения я должен сделать? – Gamerlegend

0

Можете ли вы вставить содержимое своего файла plist? Если вы хотите создать массив из списка свойств, то это должно быть что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <string>Brand A</string> 
    <string>Brand B</string> 
    <string>Brand C</string> 
    <string>Brand D</string> 
</array> 
</plist> 

В вашем случае вы, вероятно, пытаются создать NSArray из словаря на основе списка свойств. И вы должны использовать:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistPath]; 

Если какой-то предмет из этого словаря является массивом, вы можете получить его с помощью:

NSArray *array = [dict objectForKey:@"KeyForSomeArray"]; 
Смежные вопросы