从URL而不是文件加载plist

时间:2014-09-22 18:09:30

标签: ios objective-c uitableview

我目前正在尝试从网址加载plist文件。我不确定我设置代码的方式是导致它崩溃还是我做错了。

.m文件

#import "deptTableViewController.h"

@interface deptTableViewController ()

@property (nonatomic, copy) NSDictionary *names;

@property (nonatomic, copy) NSArray *keys;

@property (nonatomic, strong) NSMutableArray *filterednames;

@property (nonatomic, strong) UISearchDisplayController *searchController;

@end


@implementation deptTableViewController

@synthesize names, keys, filterednames, searchController, searchNames;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self) {

        // Custom initialization
    }

    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITableView *tableview = (id) [self.view viewWithTag:1];
    [tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    filterednames = [[NSMutableArray alloc]init];
    searchController = [[UISearchDisplayController alloc]init];
    searchController.searchResultsDataSource = self;

    // This will get the plist into data format
    NSData *dataReturn = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://morphinggamers.ca/staff.plist"]];
    NSString *path = [[NSBundle mainBundle]pathForResource:@"staff" ofType:@"plist"];
    names = [NSDictionary dictionaryWithContentsOfFile:path];

    keys = [[names allKeys]sortedArrayUsingSelector:@selector(compare:)];

    keys = [NSKeyedUnarchiver unarchiveObjectWithData:dataReturn];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView.tag == 1) {

        return [keys count];
    }
    else{

        return 1;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    if  (tableView.tag == 1) {

        NSString *key = keys[section];
        NSArray *keyValues = names[key];
        return [keyValues count];
    }
    else {

        return [filterednames count];
    }
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    if (tableView.tag == 1) {

        names = keys[indexPath.row];

        NSString *teacherNames = names[@"teacherNames"];

        cell.textLabel.text = teacherNames;
    }
    else{
        cell.textLabel.text = filterednames [indexPath.row];
    }
    return cell;
}

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

    if (tableView.tag == 1) {

        return keys[section];
    }
    else{

        return nil;
    }

}

#pragma mark - Search Display And Delegate Methods

-(void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {

    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{

    [filterednames removeAllObjects];

    if (searchString.length > 0) {

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [search] %@", self.searchNames.text];

        for (NSString *key in keys) {

            NSArray *matches = [names[key]filteredArrayUsingPredicate:predicate];

            [filterednames addObjectsFromArray:matches];

        }
    }
    return YES;
}

@end

1 个答案:

答案 0 :(得分:1)

您只能使用本地文件(设备上的文件)使用initwithcontentsofurl这个URL位于服务器上,因此您需要使用网络请求从服务器获取数据。

NSURLRequest *request = [NSURLRequest requestWithURL:@"http://morphinggamers.ca/staff.plist"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    NSDictionary *names = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:0 format:0 errorDescription:nil];

    keys = [[names allKeys]sortedArrayUsingSelector:@selector(compare:)];

    keys = [NSKeyedUnarchiver unarchiveObjectWithData:dataReturn];
    //might want to reload the tableview
    [self.tableview reloadData]
}];