我有一個表用戶和核心數據模型中有一堆列。其中一列是user_id,我試圖獲得最高的user_id並向其中添加+1,並將其傳遞給將要插入的下一個對象。我遵循apple developer guide並按照建議執行。這是我試圖執行的代碼。從核心數據和sqlite獲取最大ID
問題是:我正在返回的account_id值被設置爲一些奇怪的數字,甚至在數據庫中不存在。
「account_id」= 139784529;它應該是1,因爲我只保存了核心數據。
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;
希望有人遇到過這個問題,並修復它。
謝謝
您看到的值看起來像您從訪問未初始化的變量中獲得的「正常」垃圾值。將'nextAccountId'設置爲零應該可以解決這個問題。但我不確定爲什麼'[objects count]'返回零。 – dasblinkenlight 2013-05-09 01:50:56
[objects count]不返回零。我不確定你指的是什麼? – Harish 2013-05-09 10:26:32
在某些路徑中看起來不像是'nextAccountId'的賦值,特別是當count爲零時。 Daniel的回答在下面加了一個'else'來說明這一點。 – dasblinkenlight 2013-05-09 10:29:35