• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation


  • Subject: Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation
  • From: Greg Anderson <email@hidden>
  • Date: Thu, 4 Mar 2004 20:58:11 -0600

On Mar 4, 2004, at 5:40 PM, Stefan Pantke wrote:

Greg,

I didn't used this feature (vCard), but I suppose, the UID is not required the create a new
person, since UID are not guaranteed to be unique across systems - unless you transfer
your whole AB from some backup media to the new AB. Thus, it seems useless for me to transfer the
UID from one system to another system.

[Rest of the email snipped for brevity]

Perhaps I should rephrase my original email. I'm not trying to transfer the UID of an ABPerson from one computer to the other - truly, I wouldn't want to have to ensure that one UID is still unique on another computer. What I'm seeing is that -initWithVCardRepresentation isn't properly init-ing the ABPerson.

I whipped up this little app that just spits stuff out to the console (forgive any poor code design):

//----------------------------------------------------------
#import <Cocoa/Cocoa.h>
#import <AddressBook/AddressBook.h>

int main(int argc, const char *argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
ABPerson *tempPerson = [[ABPerson alloc] init];
ABPerson *tempPerson2;
NSData *tempData;

NSLog(@"New person:\n%@\n\n", tempPerson);

[tempPerson setValue:@"Torgo" forProperty:kABFirstNameProperty];

NSLog(@"\nNew person with name:\n%@\n\n", tempPerson);

NSLog(@"\nMaking NSData of vCard\n\n");
tempData = [tempPerson vCardRepresentation];

NSLog(@"\nvCard looks like this:%@\n",
[[NSString alloc] initWithData:tempData encoding:NSASCIIStringEncoding]);

NSLog(@"\nIniting tempPerson2\n\n");
tempPerson2 = [[ABPerson alloc] initWithVCardRepresentation:tempData];

NSLog(@"\nvCard person:\n%@\n", tempPerson2);

[pool release];

return 0;
}
//----------------------------------------------------------

The output I get is this:

2004-03-04 20:44:52.565 App[12139] New person:
{
ABTableName = ABPerson;
Creation = 2004-03-04 20:44:52 -0600;
UID = "14017758-6E4F-11D8-817A-000393515CC8:ABPerson";
}

2004-03-04 20:44:52.568 App[12139]
New person with name:
{
ABTableName = ABPerson;
Creation = 2004-03-04 20:44:52 -0600;
First = Torgo;
UID = "14017758-6E4F-11D8-817A-000393515CC8:ABPerson";
}

2004-03-04 20:44:52.568 App[12139]
Making NSData of vCard

2004-03-04 20:44:52.611 App[12139]
vCard looks like this:BEGIN:VCARD
VERSION:3.0
N:;Torgo;;;
FN:Torgo
END:VCARD

2004-03-04 20:44:52.612 App[12139]
Initing tempPerson2

2004-03-04 20:44:52.624 App[12139] *** Assertion failure in -[ABAddressBook
recordClassFromUniqueId:], Framework/AddressBook/ABAddressBook.m:1295

2004-03-04 20:44:52.625 App[12139]
vCard person:
{ABTableName = ABPerson; First = Torgo; }

App has exited with status 0.

All of this is as expected, except for the part where we init tempPerson2 via -initWithVCardRepresentation. That's assertion failure in ABAddressBook.m doesn't seem like a Good Thing. Also, note that the description of tempPerson2 only has the ABTableName and First properties, not a Creation property, and most importantly not a UID property, unlike the ABPerson made with -init. I believe this is why, when trying to add an ABPerson created with -initWithVCardRepresentation fails in 10.3.x.

For kicks, I tried changing the tempPerson2 initialization lines to be:

tempPerson2 = [[ABPerson alloc] init];
[tempPerson2 initWithVCardRepresentation:tempData];

Much to my surprise, this solved my problem, and got rid of the ABAddressBook.m assert! What bothers me is this setup requires you to call an "init" function twice. I was under the impression that objects should never be initialized more than once - has this changed?

Greg

---
Greg T. Anderson
"An apostrophe is not a warning that the letter 'S' is coming."
http://homepage.mac.com/torgo
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.


  • Follow-Ups:
    • Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation
      • From: Guillaume Rager <email@hidden>
References: 
 >OS X 10.3.x, Address Book, and initWithVCardRepresentation (From: Greg Anderson <email@hidden>)
 >Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation (From: Stefan Pantke <email@hidden>)

  • Prev by Date: Re: Help needed with NSController / Bindings problem...
  • Next by Date: Icons
  • Previous by thread: Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation
  • Next by thread: Re: OS X 10.3.x, Address Book, and initWithVCardRepresentation
  • Index(es):
    • Date
    • Thread