[英]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.