문제

I'm using this in my viewWillAppear: to print all my contacts names and numbers to my console.

- (void)viewWillAppear:(BOOL)animated
{
    CFErrorRef error = nil;
    // Request authorization to Address Book
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, &error);

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error)
        {
            if (granted) {
                // First time access has been granted, add all the user's contacts to array.

                contactsObjects = (__bridge NSMutableArray *)(ABAddressBookCopyArrayOfAllPeople(addressBookRef));
            } else {
                // User denied access.
                // Display an alert telling user that they must allow access to proceed to the "invites" page.
            }
        });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
        // The user has previously given access, add all the user's contacts to array.

        contactsObjects = (__bridge NSMutableArray *)(ABAddressBookCopyArrayOfAllPeople(addressBookRef));
    }
    else {
        // The user has previously denied access
        // Send an alert telling user that they must allow access to proceed to the "invites" page.
    }

    NSLog(@"%@", contactsObjects);
}

and here's the output

With this error message:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType length]: unrecognized selector sent to instance 0x16ec2190'***

What's the problem?

EDIT problem found with breakpoint for Exception on throw: FULL .m:

@synthesize inviteTableSearchBar;

@synthesize contactsObjects;
@synthesize facebookObjects;
@synthesize twitterObjects;
@synthesize searchResults;

//lazy instantiations <below>-------
- (NSArray *)contactsObjects
{
    if(!contactsObjects)
    {
        contactsObjects = [[NSArray alloc]init];
    }

    return contactsObjects;
}

- (NSMutableArray *)searchResults
{
    if(!searchResults)
    {
        searchResults = [[NSMutableArray alloc]init];
    }

    return searchResults;
}
//lazy instantiations <above>-------

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

- (void)viewWillAppear:(BOOL)animated
{
    CFErrorRef error = nil;
    // Request authorization to Address Book
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, &error);

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error)
        {
            if (granted) {
                // First time access has been granted, add all the user's contacts to array.

                contactsObjects = (__bridge_transfer NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBookRef));
            } else {
                // User denied access.
                // Display an alert telling user that they must allow access to proceed to the "invites" page.
            }
        });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
        // The user has previously given access, add all the user's contacts to array.

        contactsObjects = (__bridge_transfer NSMutableArray *)(ABAddressBookCopyArrayOfAllPeople(addressBookRef));
    }
    else {
        // The user has previously denied access
        // Send an alert telling user that they must allow access to proceed to the "invites" page.
    }

    NSLog(@"%@", contactsObjects);
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    //CUSTOM APPEARANCE <below>

    //set in order to actually change the search bar's UIColor.
    [self.inviteTableSearchBar setBackgroundImage:[UIImage new]];
    [self.inviteTableSearchBar setTranslucent:YES];

    self.inviteTableSearchBar.backgroundColor = [UIColor colorWithHexString:@"#333333"];
    [[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor colorWithHexString:@"#669900"]];

    //Uncomment the following line to preserve selection between presentations; YES to clear tableView when the tableViewController recieves `viewWillAppear:`
    self.clearsSelectionOnViewWillAppear = YES;

    //Fill array
    //[self.contactsObjects addObject:@"Examples<below>"];
    //[self.contactsObjects addObject:@"John"];
    //[self.contactsObjects addObject:@"Sanford"];
    //[self.contactsObjects addObject:@"Sally"];
    //[self.contactsObjects addObject:@"Susan B. Anthony"];

    // Hide the search bar until user scrolls up
    CGRect newBounds = self.tableView.bounds;
    newBounds.origin.y = newBounds.origin.y + inviteTableSearchBar.bounds.size.height;
    self.tableView.bounds = newBounds;

}

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

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.contactsObjects.count;
}

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

    //configure the cells
    cell.textLabel.text = self.contactsObjects[indexPath.row];

    return cell;
}

Problem is on cell.textLabel.text = self.contactsObjects[indexPath.row]; underneath the //configure the cells. in the cellForRowAtIndexPath: method.

도움이 되었습니까?

해결책 2

#define CHECK_NULL_STRING(str) ([str isKindOfClass:[NSNull class]] || !str)?@"":str

 id p=[contactsObjects objectAtIndex:indexPath.row];
    NSString *fName=(__bridge NSString *)(ABRecordCopyValue((__bridge ABRecordRef)(p), kABPersonSortByFirstName));
      NSString *lName=(__bridge NSString *)(ABRecordCopyValue((__bridge ABRecordRef)(p), kABPersonSortByLastName));
cell.textLabel.text=[NSString stringWithFormat:@"%@ %@",CHECK_NULL_STRING(fName),CHECK_NULL_STRING(lName)]

다른 팁

It means that you've attempted to ask the object at address 0x175c4b10 for its length, but it is not an object that responds to the method length. The error is probably not in the code you've posted, since you do not make any calls to the length method there. It could be that you're calling length somewhere else (search your code for where), or it could be that you're calling a method which eventually calls length, but you're passing it an invalid parameters.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top