2014-01-06 90 views
0

我是iOS开发新手。目前,我试图从.plist文件中获取数据并在UITableView上显示。在运行应用程序时,Xcode没有提供任何错误,但我的应用程序说明不了什么,但这iOS从.plist文件加载数据

enter image description here

这里是我的代码

TestAppTableViewController.h

#import <UIKit/UIKit.h> 

@interface TestAppTableViewController : UITableViewController 

@property (nonatomic,strong) NSArray *content; 

@end 

TestAppTableViewController.m

#import "TestAppTableViewController.h" 

@interface TestAppTableViewController() 

@end 

@implementation TestAppTableViewController 

@synthesize content = _content; 

- (NSArray *) content{ 
    if (!_content) { 
     _content = [[NSArray alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]]; 
    } 

    return _content; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Uncomment the following line to preserve selection between presentations. 
    // self.clearsSelectionOnViewWillAppear = NO; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

    // Return the number of sections. 
    return 0; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [self.content count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // Configure the cell... 

    cell.textLabel.text = [[self.content objectAtIndex:indexPath.row]valueForKey:@"city"]; 
    cell.detailTextLabel.text = [[self.content objectAtIndex:indexPath.row]valueForKey:@"state"]; 
    return cell; 
} 

Data.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> 
    <dict> 
     <key>city</key> 
     <string>New York</string> 
     <key>state</key> 
     <string>NY</string> 
     <key>cityText</key> 
     <string>This is the description of the city that goes in the tex view just testing.</string> 
    </dict> 
    <dict> 
     <key>city</key> 
     <string>Los Angeles</string> 
     <key>state</key> 
     <string>CA</string> 
     <key>cityText</key> 
     <string>This the second item&apos;s textview</string> 
    </dict> 
    <dict> 
     <key>city</key> 
     <string>Chicago</string> 
     <key>state</key> 
     <string>IL</string> 
     <key>cityText</key> 
     <string>here is the text view description for the third item.</string> 
    </dict> 
    <dict> 
     <key>city</key> 
     <string>Sandiago</string> 
     <key>state</key> 
     <string>CA</string> 
     <key>cityText</key> 
     <string>Here is another city from california</string> 
    </dict> 
    <dict> 
     <key>city</key> 
     <string>Talahasy</string> 
     <key>state</key> 
     <string>FL</string> 
     <key>cityText</key> 
     <string>Talahasy is the capital of the florida state.</string> 
    </dict> 
    <dict> 
     <key>city</key> 
     <string>Boise</string> 
     <key>state</key> 
     <string>Idaho</string> 
     <key>cityText</key> 
     <string>boise is the capital of idaho and i have no idea where that is.</string> 
    </dict> 
</array> 
</plist> 

我没能找出问题。所以,我的问题是我的代码中有什么问题?如何显示plist文件中的数据?我浏览了前面的问题在stackoverflow中,但这并没有帮助我。

+0

numberOfSectionsInTableView你正在返回0吗? – Bamsworld

+2

@Yasir你需要解析plist数据,然后将其加载到tableview中。检查你的数组是否有信息或没有。使用Json解析器 –

回答

4

你的tableview至少需要一个本条

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 

    // Return the number of sections. 
    return 1;// make this 1 
} 

使用objectForKey代替也尝试像这样(尽管如果key不是以@开头的话,它会自动调用)并且输入cast来确保。

cell.textLabel.text = (NSString*)[[self.content objectAtIndex:indexPath.row] objectForKey:@"city"]; 
cell.detailTextLabel.text = (NSString*)[[self.content objectAtIndex:indexPath.row] objectForKey:@"state"]; 

如果你仍然没有得到任何东西,那么值得检查的内容实际上包含plist数据。在您的- (NSArray *)内容方法中,在您返回之前可能值得记录_content的计数。另外,请确认self.content = _content

1

我认为这个问题是在这里,你应该返回1,或者你想除了0任意数目:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

    // Return the number of sections. 
    return 0; 
} 
0
@interface ViewController:UIViewController <UITableViewDelegate, UITableDataSource> 

刚才看到你的plist你是数组,你可以使用的字典里面。所以像下面的代码实现它可以帮助你

- (void)viewDidLoad { 

    tableView.delegate = self; 
    tableView.dataSource = self; 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"yourFilename" ofType:@"plist"]; 
    NSArray *contentArray = [NSArray arrayWithContentsOfFile:path]; 
    // Having outlet for tableArray variable. 
    tableArray = [[NSMutableArray alloc]initWithArray:contentArray copyItems:YES]; 

    [super viewDidLoad]; 

} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return [tableArray count]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // In your case dictionary contains strings with keys and values. The below line returns dictionary only. not array.. 
    NSDictionary *dictionary = [tableArray objectAtIndex:section]; 
    return dictionary.allKeys.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; 
    } 
    NSDictionary *dictionaryOfArray = [tableArray objectAtIndex:indexPath.section]; 
    NSArray *keysArray = dictionaryOfArray.allKeys; 
    cell.textLabel.text = [keysArray objectAtIndex:indexPath.row]; 
    cell.detailTextLabel.text = [dictionaryOfArray valueForKey:[keysArray objectAtIndex:indexPath.row]]; 
    return cell; 
}