0

プロパティを持っています (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]];
    }
}

したがって、2 番目NSLogには例外がありますBAD_ACCESS。私のせいを理解できません。

4

3 に答える 3

2

あなたは値generateUuidStringを返しているので、それを保持する必要があります(セッターを使用して行うことができます)。autoreleaseviewDidAppearself.itemUUID = ...

kambala も正しいです。辞書の 4 つのキーに対して 3 つのオブジェクトも追加しました。

于 2013-09-26T12:46:28.053 に答える
2

UUID をディクショナリのオブジェクト リストに追加するのを忘れたため、オブジェクトとキーの数が一致しません。正しい辞書の初期化:

NSDictionary *changedData = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:nameField.text, priceField.text, quantityField.text, _itemUUID, nil] forKeys:[NSArray arrayWithObjects: @"Name", @"Price", @"Quantity", @"UUID", nil]];
于 2013-09-26T12:47:01.720 に答える
1

ARC を使用していない場合は、これ

_itemUUID = [[EADataManager sharedInstance] generateUuidString];

所有していないオブジェクトをインスタンス変数に割り当てます。自動解放プールが空になると、そのオブジェクトは消えます。プロパティを宣言したので、それを使用する必要があります。

[self setItemUUID: [[EADataManager sharedInstance] generateUuidString]];
于 2013-09-26T12:48:42.080 に答える