Невозможно заполнить TableView списком - PullRequest
1 голос
/ 19 декабря 2011

Я бы хотел сделать что-то вроде технологии «Добавить в избранное».В моем приложении есть tabbar.На первой вкладке есть форма с кнопкой.И то, что я хочу сделать, это когда вы нажимаете кнопку, она сохраняет имя панели навигации в массиве и сохраняет массив в plist.И когда вы открываете вторую вкладку, вы видите представление с tableview в нем, и я хотел бы видеть имя navigationBar здесь, в ячейке (поэтому массив берет информацию из plist и помещает ее вtableView).Итак, вот мой код:

// Info.h Its a class with button
#import <UIKit/UIKit.h>
@class Favorites;
@interface Info : UIViewController
{
    NSMutableArray *favGifts;
    NSString *justAstring;
}
@property (nonatomic, retain) NSMutableArray *favGifts;
@property (nonatomic, retain) NSString *justAstring;

- (IBAction)save:(id)sender;
-(NSString *)pathOfFile;

@end

//Info.m

#import "Info.h"

@implementation Info

@synthesize ADFbutton;
@synthesize justAstring;
@synthesize favGifts;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (NSString *)pathOfFile {

    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentFolder = [path objectAtIndex:0];
    return [documentFolder stringByAppendingFormat:@"myFile.plist"];

}
- (IBAction)save:(id)sende{

    NSString *m = self.navigationItem.title;
    favGifts = [[NSMutableArray alloc]init];
    [favGifts addObject:m];
    [favGifts writeToFile:[self pathOfFile] atomically:YES];
    justAstring = self.pathOfFile;
    NSLog(@"%@", justAstring);
}

//And this is class with the tableview inside:

#import <UIKit/UIKit.h>
@class Info;
@interface Favorites : UIViewController 
<UITableViewDataSource>{

    UITableView *myTableView;
    NSString *name;
    Info *info;
}
@property (retain, nonatomic) IBOutlet UITableView *myTableView;
@property (nonatomic,retain) NSString *name;
@property (nonatomic, retain) Info *info;

@end
// .m
#import "Favorites.h"
#import "Info.h"

NSMutableArray *array;

@implementation NewFavGifts

@synthesize myTableView;
@synthesize giftInfo;
@synthesize name;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle
- (void) viewWillAppear:(BOOL)animated{

    NSString *filePath = info.justAstring;

    if ([[NSFileManager defaultManager]fileExistsAtPath:@"myFile.plist"]) {
        array = [[NSMutableArray alloc]initWithContentsOfFile:filePath];

   }

    [myTableView reloadData];
}
- (void)viewDidLoad
{


    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [self setMyTableView:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

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

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

    // Return the number of rows in the section.
    return [array count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    NSString *cellValue = [array objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue; 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 75; 
}
@end

Xcode не показывает никаких ошибок, но мой tableView пуст, когда я его открываю.Я не могу найти свою ошибку или какое-либо решение в течение 4 дней.

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Я бы хотел изменить несколько вещей:

  • в определении интерфейса, добавить UITableviewDelegate

    @ interface Избранное: UIViewController{

  • вставьте NSArray *array в интерфейс, добавьте свойство nonatomic,retain

  • заполните массив self.array = [NSArray arrayWithContentsOfFile:...].Это не обязательно NSMutableArray, но используйте self.array, чтобы сохранить его правильно.

1 голос
/ 19 декабря 2011

Вам нужно с трудом стрелять шаг за шагом

Проверьте, есть ли у вас какая-либо вещь в массиве, добавив NSLog, как показано ниже,

Если вы получаете «Array Count 0» в консолиэто означает, что ничего не написано в файле plist

или если вы вообще не получаете текст NSLog в консоли, это означает, что файл plist не существует

- (void) viewWillAppear:(BOOL)animated{

    NSString *filePath = info.justAstring;

    if ([[NSFileManager defaultManager]fileExistsAtPath:@"myFile.plist"]) {
        array = [[NSMutableArray alloc]initWithContentsOfFile:filePath];

   NSLog(@"Array Count %d", [array count)); //add this line and check whether you get any thing in the array
   }

    [myTableView reloadData];
}
...