我目前正在學習在iPhone上編程。iPhone - 如何正確更改標籤中的字符串?
我目前有一個模擬小鍵盤的小測試應用程序,所以我有幾個按鈕,當按下時應該在標籤中放置一些文本。
然後,我拿什麼在標籤,並用它來打開一個ABUNKnownPersonControllerView在那裏使用。只是一個基本的應用程序,以適應iPhone中的一些東西。
我遇到問題的地方似乎與使用字符串一起工作來顯示標籤中的內容。我得到了EXC_BAD_ACCESS錯誤,所以我重新讀了內存管理文檔,但是我無法找到任何應該有內存泄漏的地方。
所以我認爲我的問題是我錯誤地使用字符串。我的代碼如下:
//頭文件
@interface KeyPadViewController : UIViewController <ABUnknownPersonViewControllerDelegate>{
IBOutlet UILabel *phoneNumber;
//NSString *number;
}
@property (nonatomic, retain) UILabel *phoneNumber;
//@property (nonatomic, retain) NSString *number;
-(IBAction)addNum1;
-(IBAction)addNum2;
-(IBAction)showUnknownPersonViewController;
//實現文件
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = NSLocalizedString(@"Keypad",@"Keypad");
//self.number = @"";
self.phoneNumber.text = @"";
}
-(IBAction)addNum1{
//self.number = [self.number stringByAppendingString:@"1"];
self.phoneNumber.text = [self.phoneNumber.text stringByAppendingString:@"1"];
}
-(IBAction)addNum2{
//self.number = [self.number stringByAppendingString:@"2"];
self.phoneNumber.text = [self.phoneNumber.text stringByAppendingString:@"2"];
}
而且在實現文件中showUnknownPerson觀點:
-(void)showUnknownPersonViewController
{
//NSString *contactNum = self.phoneNumber.text;
ABRecordRef aContact = ABPersonCreate();
CFErrorRef anError = NULL;
ABMultiValueRef email = ABMultiValueCreateMutable(kABPersonPhoneProperty);
bool didAdd = ABMultiValueAddValueAndLabel(email, self.phoneNumber.text, kABPersonPhoneMobileLabel, NULL);
if (didAdd == YES)
{
ABRecordSetValue(aContact, kABPersonPhoneProperty, email, &anError);
if (anError == NULL)
{
ABUnknownPersonViewController *picker = [[ABUnknownPersonViewController alloc] init];
picker.unknownPersonViewDelegate = self;
picker.displayedPerson = aContact;
picker.allowsAddingToAddressBook = YES;
picker.allowsActions = YES;
[self.navigationController pushViewController:picker animated:YES];
[picker release];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Could not create unknown user"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
[alert release];
}
}
CFRelease(email);
CFRelease(aContact);
}
而dealloc:
- (void)dealloc
{
[phoneNumber release]; //@synthesize
// [數字發佈]; // @合成 [super dealloc]; }
我試過使用可變字符串,但有相同的錯誤,我也試過不釋放UILabel和NSString,並有相同的問題。
當我的應用程序加載,如果我按下一個按鈕,一個字符出現在標籤,如果我然後使用showUnknowPersonViewController一切正常,如果我按下按鈕1,然後按鈕2,以便我知道有兩個字符UILabel(「12」)並選擇使用showUnknownPersonViewcontroller然後我得到崩潰。
*** -[CFString release]: message sent to deallocated instance 0x1226a0
但是我不明白在哪裏可以取消分配?
這可能是我在教程中遺漏的一些基本內容,但我無法弄清楚,任何人都可以看到我可能做錯了什麼?
編輯:我想補充如果self.phoneNumber.text(的UILabel)返回空或它工作正常,但是如果它的2個或更多,我得到了崩潰的一個字符。
編輯2:我已經完全打消了我的NSString從代碼,我仍然有同樣的問題,所以它看起來像它的多數民衆贊成的UILabel導致了問題?查看上面更改的代碼。
難道你不知道崩潰外觀的線?嘗試啓用NSZombieEnabled,看看它是否讓你更進一步! – Joetjah 2011-04-15 10:04:29
@Joetjah,我已經添加NSZombieEnabled調試器,但我使用Xcode 4,我似乎無法讓它工作,告訴我它崩潰的行,當我運行它,它總是鞋我這一行:int retVal = UIApplicationMain(argc,argv,nil,nil); – 2011-04-15 10:21:47