Заполните табличное представление с контактами из адресной книги в Xcode 4.3 - PullRequest
3 голосов
/ 22 марта 2012

Я делаю приложение для iPad и iPhone. на первом экране вам нужно войти, это работает. но потом я подхожу к следующему экрану с видом на стол. я хочу, чтобы это представление было всеми именами (именем и фамилией) из адресной книги на iPad или iPhone.

я получаю табличное представление, но оно пустое. кто-нибудь может мне помочь?

это мой контроллер (.m, мне не нужно редактировать .h):

#import "TableViewController.h"
#import "ViewController.h"
#import "AddressBook/AddressBook.h"

@interface TableViewController ()
@end

@implementation TableViewController
{
NSMutableArray *ListOfItems;
}

@synthesize tblContacts;

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

- (void)viewDidLoad
{
[self ListContacts];
[super viewDidLoad];
// Do any additional setup after loading the view.
}

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

- (BOOL)shouldAutorotateToInterfaceOrientation:   (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)Back:(id)sender{
[self dismissModalViewControllerAnimated:YES];
}

- (void)ListContacts{
/*ABAddressBookRef addressBook = ABAddressBookCreate( );
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
CFIndex nPeople = ABAddressBookGetPersonCount( addressBook );

for ( int i = 0; i < nPeople; i++ )
{
    ABRecordRef ref = CFArrayGetValueAtIndex( allPeople, i );
    UITableView ContactList 
} */

ListOfItems = [[NSMutableArray alloc] init];

[ListOfItems addObject:@"Iceland"];
[ListOfItems addObject:@"Greenland"];
[ListOfItems addObject:@"Switzerland"];
[ListOfItems addObject:@"Norway"];
[ListOfItems addObject:@"New Zealand"];
[ListOfItems addObject:@"Greece"];
[ListOfItems addObject:@"Rome"];
[ListOfItems addObject:@"Ireland"];

self.navigationItem.title = @"Countries";
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section         {
return [ListOfItems count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

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

// Set up the cell...
NSString *cellValue = [ListOfItems objectAtIndex:indexPath.row];
cell.text = cellValue;

return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}

@end

обратите внимание, что я попытался заполнить свою таблицу некоторыми жестко закодированными значениями. но опять мой стол остается пустым. Пожалуйста, помогите.

Ответы [ 5 ]

0 голосов
/ 02 февраля 2015

Попробуйте использовать [self.tableView reloadData]; после добавления данных в объекты

0 голосов
/ 24 февраля 2014

Это год спустя, но, надеюсь, это кому-нибудь поможет:

Похоже, вы закомментировали очень важный код под вашим ListContacts методом.

Удалите /*и */ ниже - (void)ListContacts, и ваш код должен как минимум возвращать некоторые значения.

0 голосов
/ 17 июля 2012

Вы установили делегат таблицы и источник данных? Вы можете легко сделать это через Interface Builder:

  1. Выберите табличное представление в Интерфейсном Разработчике.
  2. Перейдите в Инспектор Соединителей на правой панели (последняя вкладка, где вы связываете Розетки и Действия).
  3. Свяжите источники данных и делегатов с владельцем файла (или файлом, содержащим информацию о методах управления табличным представлением).

Не забудьте указать свой собственный класс в Инспекторе идентификации владельца файла (опять же, в правой панели XCode, третья вкладка).

Надеюсь, это поможет вам!

0 голосов
/ 28 августа 2012
cell.textLabel.text = [listOfItems objectAtIndex:indexpath.row];

и убедитесь, что вы установили идентификатор в атрибутах в ячейку.

0 голосов
/ 22 марта 2012
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
@interface AddressBookViewController: UIViewController <ABPeoplePickerNavigationControllerDelegate> {}
-(IBAction) btnClicked:(id)sender;
@end

Это API адресной книги для доступа к приложению контактов из вашего собственного приложения. Может быть, вы можете использовать его, и это будет гораздо быстрее, чем реализовать свой собственный UITableView и все.

Надеюсь, это поможет.

...