Tôi có một Người dùng bảng và có nhiều cột trong mô hình dữ liệu lõi. Một trong những cột là user_id và tôi đang cố gắng để có được user_id cao nhất và thêm + 1 vào nó và chuyển nó cho đối tượng tiếp theo sẽ được chèn vào. Tôi đã theo dõi apple developer guide và triển khai như được đề xuất. Đây là mã mà tôi đang cố thực hiện.Lấy ID tối đa từ dữ liệu lõi & sqlite
Sự cố là: Giá trị tài khoản của tôi đang được trả về đang được đặt thành một số lạ mà thậm chí không tồn tại trong cơ sở dữ liệu.
"account_id" = 139784529; Nó được coi là 1 vì tôi chỉ lưu trong dữ liệu cốt lõi.
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Users" inManagedObjectContext:self._managedObjectContext];
[request setEntity:entity];
// Specify that the request should return dictionaries.
[request setResultType:NSDictionaryResultType];
// Create an expression for the key path.
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"account_id"];
// Create an expression to represent the function you want to apply
NSExpression *expression = [NSExpression expressionForFunction:@"max:"
arguments:@[keyPathExpression]];
// Create an expression description using the minExpression and returning a date.
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
// The name is the key that will be used in the dictionary for the return value.
[expressionDescription setName:@"maxAccountId"];
[expressionDescription setExpression:expression];
[expressionDescription setExpressionResultType:NSInteger32AttributeType]; // For example, NSDateAttributeType
// Set the request's properties to fetch just the property represented by the expressions.
[request setPropertiesToFetch:@[expressionDescription]];
// Execute the fetch.
NSError *error;
NSArray *objects = [self._managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) {
// Handle the error.
}
else {
if ([objects count] > 0) {
nextAccountId = [[[objects objectAtIndex:0] valueForKey:@"maxAccountId"] integerValue];
}
}
}
@catch (NSException *exception) {
NSLog(@"%@",[exception reason]);
}
return nextAccountId + 1;
Hy vọng ai đó đã gặp phải vấn đề này trước và khắc phục sự cố.
Cảm ơn bạn
Giá trị mà bạn thấy trông giống như giá trị rác "bình thường" mà bạn nhận được khi truy cập các biến chưa được khởi tạo. Đặt 'nextAccountId' thành 0 sẽ sửa lỗi đó. Tôi không chắc chắn tại sao '[đối tượng đếm]' trả về số không, mặc dù. – dasblinkenlight
[đối tượng đếm] không trả về 0. Tôi không chắc chắn những gì bạn đang đề cập đến? – Harish
Nó không giống như có một sự phân công của 'nextAccountId' trong một số đường dẫn, đặc biệt khi đếm là số không. Câu trả lời của Daniel dưới đây đã thêm một 'else' để che giấu điều đó. – dasblinkenlight