[英]Strange BAD_ACCESS exception iOS
我有財產(noARC)
@property (nonatomic, retain) NSString *itemUUID;
和初始化
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (_itemUUID) {
[self updateViews];
} else {
_itemUUID = [[EADataManager sharedInstance] generateUuidString];
NSLog(@"%@", _itemUUID);
}
}
UUID生成方法是
- (NSString *)generateUuidString
{
CFUUIDRef UUID = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, UUID);
[uuidString autorelease];
CFRelease(UUID);
return uuidString;
}
並且我嘗試在另一種方法中以非常簡單的方式使用此屬性:
- (IBAction)submitButton:(id)sender
{
if ([nameField.text length] > 3)
{
NSLog(@"%@", _itemUUID);
NSDictionary *changedData = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:nameField.text, priceField.text, quantityField.text, nil] forKeys:[NSArray arrayWithObjects: @"Name", @"Price", @"Quantity", @"UUID", nil]];
}
}
因此,在第二個NSLog
有一個異常BAD_ACCESS
。 無法理解我的錯。
您的generateUuidString
返回的是autorelease
值,因此您的viewDidAppear
應該保留它(您可以使用setter self.itemUUID = ...
)。
kambala也是正確的,您還為字典的四個鍵添加了三個對象。
您忘記將UUID添加到字典的對象列表中,因此對象和鍵的數量不匹配。 正確的字典初始化:
NSDictionary *changedData = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:nameField.text, priceField.text, quantityField.text, _itemUUID, nil] forKeys:[NSArray arrayWithObjects: @"Name", @"Price", @"Quantity", @"UUID", nil]];
如果您未使用ARC,則此
_itemUUID = [[EADataManager sharedInstance] generateUuidString];
是錯誤的,它將您不擁有的對象分配給實例變量。 自動釋放池耗盡后,該對象將消失。 由於已聲明屬性,因此應使用它。
[self setItemUUID: [[EADataManager sharedInstance] generateUuidString]];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.