gpt4 book ai didi

iphone - 如何将字符串对象传递给 ABNewPersonViewController.h 的名称字段?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:45 26 4
gpt4 key购买 nike

我正在开发名片阅读器应用程序。当我读取一张卡片时,我从 OCR 输出中得到一个字符串对象。我将字符串与其他字符串分开,例如姓名、地址、电话号码、电子邮件和网址。但我的问题是我无法在 ABNewPersonViewController 类的相应字段中发送这些字符串。

最佳答案

见下面的代码。这是一个详细的代码。

-(NSUInteger)addNewContacts_InAddressBook:(NSMutableArray*)contactsToBeAdded
{

int numContacts=[contactsToBeAdded count];

if (numContacts==0)
{
return 0;
}

int32_t uniqueId;

@try
{
ABAddressBookRef iphoneAddressBook=ABAddressBookCreate();

CFErrorRef error = NULL;

if(!iphoneAddressBook)
{
DLog(@"unable to open addressBook");

return 0;
}


NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"yyyy-MM-dd"];
[inFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc] init];
NSMutableArray *recordRefArray=[[NSMutableArray alloc] initWithCapacity:numContacts];
BOOL shouldReleasePool=NO;
NSAutoreleasePool *innerPool=nil;
for(int j=0;j<numContacts;j++)
{
if((j&255)==0)
{
innerPool= [[NSAutoreleasePool alloc] init];
shouldReleasePool=YES;
}
Contact *objContact=[contactsToBeAdded objectAtIndex:j];
ABRecordRef newPerson = ABPersonCreate();
if(objContact.mPrefixName!=nil)
{
if([objContact.mPrefixName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonPrefixProperty, (CFStringRef)objContact.mPrefixName , &error);
}
}

if(objContact.mFirstName!=nil)
{
if([objContact.mFirstName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (CFStringRef)objContact.mFirstName , &error);
}
}

if(objContact.mMiddleName!=nil)
{
if([objContact.mMiddleName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonMiddleNameProperty, (CFStringRef)objContact.mMiddleName , &error);
}
}

if(objContact.mLastName!=nil)
{
if([objContact.mLastName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonLastNameProperty, (CFStringRef)objContact.mLastName , &error);
}
}

if(objContact.mNickName!=nil)
{
if([objContact.mNickName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonNicknameProperty, (CFStringRef)objContact.mNickName , &error);
}
}

if(objContact.mSuffixName!=nil)
{
if([objContact.mSuffixName isEqualToString:@""]==FALSE)
{
ABRecordSetValue(newPerson, kABPersonSuffixProperty, (CFStringRef)objContact.mSuffixName , &error);
}
}


// Storing user photo into address book
if(objContact.mUserPhotoData)
{
if ([objContact.mUserPhotoData length] > 0)
ABPersonSetImageData(newPerson, (CFDataRef)objContact.mUserPhotoData, &error);
}

ContactProperty *objContactProperty;
int numProps=[objContact.mPropertyArray count];

ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMutableMultiValueRef multiUrl = ABMultiValueCreateMutable(kABMultiStringPropertyType);
NSMutableDictionary *addressDictionary=[[NSMutableDictionary alloc] init];
ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);

BOOL notFirstTime=NO;
int currentPropertyIndex=-1;
NSString *displayName;
ABMutableMultiValueRef multiDate = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMutableMultiValueRef multiIM = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);

NSMutableDictionary *IMDictionary;


for(int i=0;i<numProps;i++)
{

objContactProperty=[objContact.mPropertyArray objectAtIndex:i];

int PID=objContactProperty.mContactPropId;


// if([objContactProperty.mContactDataType compare:@"Text"]==NSOrderedSame)
//{

if (PID==3)
{

if(objContactProperty.mContactPropertyString)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonOrganizationProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}
// }

///\/\/\/\/\/\/\/\/




if(PID==1901)
{
if(objContactProperty.mContactPropertyString)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonNoteProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}




if(PID==4)
{
if(objContactProperty.mContactPropertyString)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonFirstNamePhoneticProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}



if(PID==5)
{
if(objContactProperty.mContactPropertyString)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonLastNamePhoneticProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}




if(PID==6)
{
if([objContactProperty.mContactPropertyString length]>=1)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonJobTitleProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}




if(PID==7)
{
if(objContactProperty.mContactPropertyString)
{
// DLog(@"Saving Into AddressBook: Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABRecordSetValue(newPerson, kABPersonDepartmentProperty, (CFStringRef)objContactProperty.mContactPropertyString, &error);
}

}




//Adding phone numbers


//if([objContactProperty.mContactDataType compare:@"Phone"]==NSOrderedSame)
if(PID>10 && PID<=200)
{
// if(objContactProperty.mContactPropertyString)
// {
// DLog(@"Label : %@ Value : %@",objContactProperty.mDisplayName,objContactProperty.mContactPropertyString);
ABMultiValueAddValueAndLabel(multiPhone, objContactProperty.mContactPropertyString, (CFStringRef)objContactProperty.mDisplayName, NULL);
// }
}






//Adding emails



// if([objContactProperty.mContactDataType compare:@"Email"]==NSOrderedSame)
if(PID>300 && PID<=320)
{
ABMultiValueAddValueAndLabel(multiEmail, objContactProperty.mContactPropertyString, @"home", NULL);
}
else if(PID>320 && PID<=340)
{
ABMultiValueAddValueAndLabel(multiEmail, objContactProperty.mContactPropertyString, @"work", NULL);
}
else if(PID>340 && PID<=400)
{
ABMultiValueAddValueAndLabel(multiEmail, objContactProperty.mContactPropertyString, (CFStringRef)objContactProperty.mDisplayName, NULL);
}





//Adding web URLs


// if([objContactProperty.mContactDataType compare:@"Url"]==NSOrderedSame)
if(PID>500 && PID<=600)
{
// if(objContactProperty.mContactPropertyString)
// {
ABMultiValueAddValueAndLabel(multiUrl, objContactProperty.mContactPropertyString, (CFStringRef)objContactProperty.mDisplayName, NULL);
// }
}






//ADDRESSES


if (PID>700 && PID<=1300)
{

int propertyIndex=(PID-1)/10; //To adjust for 710 to fall into category of (710-1)/10=70 instead of 71.

if (propertyIndex!=currentPropertyIndex)
{
if (notFirstTime)
{
bool didAddAddress;

if(currentPropertyIndex*10<901)
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABHomeLabel, NULL);
else if(currentPropertyIndex*10<1101)
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABWorkLabel, NULL);
else
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, displayName, NULL);

[addressDictionary release];
addressDictionary = [[NSMutableDictionary alloc] init];
}

currentPropertyIndex=propertyIndex;

notFirstTime=YES;
}

displayName=[NSString stringWithString:objContactProperty.mDisplayName];

switch (PID%10)
{
case 1:

[addressDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *) kABPersonAddressStreetKey];
break;

case 2:
[addressDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *)kABPersonAddressCityKey];
break;

case 3:
[addressDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *)kABPersonAddressStateKey];
break;

case 4:
[addressDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *)kABPersonAddressZIPKey];
break;

case 5:
[addressDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *)kABPersonAddressCountryKey];
break;

default:
break;
}
}





//DATE AND BIRTHDAY

NSDate *ddate;

if (PID>1400 && PID<=1500)
{
switch (PID)
{
case 1401:
ddate=[inFormat dateFromString:[objContactProperty.mContactPropertyString substringToIndex:10]];
ABRecordSetValue(newPerson, kABPersonBirthdayProperty, ddate , &error);
break;

default:
ddate=[inFormat dateFromString:[objContactProperty.mContactPropertyString substringToIndex:10]];
ABMultiValueAddValueAndLabel(multiDate, ddate, (CFStringRef)objContactProperty.mDisplayName, NULL);
break;
}
}




//INSTANT MESSAGE

if (PID>1600 && PID<=1800)
{

switch (PID%2)
{
case 1:
IMDictionary=[[NSMutableDictionary alloc] init];
[IMDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *) kABPersonInstantMessageUsernameKey];
break;
case 0:
[IMDictionary setObject:objContactProperty.mContactPropertyString forKey:(NSString *) kABPersonInstantMessageServiceKey];
ABMultiValueAddValueAndLabel(multiIM, IMDictionary, (CFStringRef)objContactProperty.mDisplayName, NULL);
[IMDictionary release];
default:
break;
}
}





}

if ([addressDictionary count]!=0)
{
bool didAddAddress;


NSRange range1,range2;

range1=[displayName rangeOfString:@"home" options:NSCaseInsensitiveSearch];
range2=[displayName rangeOfString:@"work" options:NSCaseInsensitiveSearch];

if (range1.location!=NSNotFound)
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABHomeLabel, NULL);
else if (range2.location!=NSNotFound)
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABWorkLabel, NULL);
else
didAddAddress = ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, (CFStringRef)displayName, NULL);
}
[addressDictionary release];

ABRecordSetValue(newPerson, kABPersonAddressProperty, multiAddress, NULL);
CFRelease(multiAddress);


DLog(@"Saving Phone Numbers");
ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil);
CFRelease(multiPhone);
ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail,nil);
CFRelease(multiEmail);
ABRecordSetValue(newPerson, kABPersonURLProperty, multiUrl,nil);
CFRelease(multiUrl);
ABRecordSetValue(newPerson, kABPersonDateProperty, multiDate,nil);
CFRelease(multiDate);
ABRecordSetValue(newPerson, kABPersonInstantMessageProperty, multiIM, NULL);
CFRelease(multiIM);







bool outcome=ABAddressBookAddRecord(iphoneAddressBook, newPerson, &error);

#ifdef ENABLE_DEBUG_CONSOLE_OUTPUT
if(outcome==FALSE)
DLog(@"RECORD COULD NOT BE ADDED TO THE ADDRESSBOOK");
#endif

[recordRefArray addObject:newPerson];
CFRelease(newPerson);



if(shouldReleasePool)
{
[innerPool release];
shouldReleasePool=NO;
}

}

DLog(@"Saving AddressBook");
DBManager *dbManager=[DBManager getInstance];
[dbManager setFLAGIsSavingAddressBook:YES];
bool outcome=ABAddressBookSave(iphoneAddressBook, &error);
[dbManager setFLAGIsSavingAddressBook:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:ADDRESSBOOK_DONE_SAVING object:nil];

#ifdef ENABLE_DEBUG_CONSOLE_OUTPUT
if(outcome==FALSE)
DLog(@"ADDRESSBOOK COULD NOT BE SAVED");
#endif


for(int i=0;i<numContacts;i++)
{

uniqueId=ABRecordGetRecordID([recordRefArray objectAtIndex:i]);
Contact *objContact=[contactsToBeAdded objectAtIndex:i];
objContact.addressBookId=uniqueId;

DLog(@"Adding multiple records at once. The LID for the newly added record is: %i",uniqueId);
}

[recordRefArray release];


//Initializing new addressBook id in contact
//objContact.addressBookId=uniqueId;


CFRelease(iphoneAddressBook);


[pool release];

[inFormat release];

}
@catch (NSException * e)
{
DLog(@"Exception in addNewContactInAddressBook ");
}
@finally {
}

return 0;
//

return uniqueId;
}

关于iphone - 如何将字符串对象传递给 ABNewPersonViewController.h 的名称字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com