我在我的应用程序中犯了一个奇怪的错误,我不知道它为什么会这样做。如果实体中有超过0个对象,则它将显示正确的数量。如果实体中有0个对象,它将显示1,而不是0(即使它在另一个获取请求中工作正常)。
注意:“cell.badgeString”没有什么特别之处,它只是通过披露指标显示实体中对象的数量。
if (cell.tag == 0)
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Uploads" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
[request setIncludesSubentities:NO];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:nil];
NSArray *resultString = [results valueForKey:@"url"];
NSString *string = [resultString description];
// I'm thinking it has something to do with this right here, maybe that is why it is displaying one instead of zero?
NSArray *count = [string componentsSeparatedByString:@","];
NSString *upload_amount = [[NSNumber numberWithInteger:count.count] stringValue];
cell.badgeString = upload_amount;
}
我不能只做[self.managedContext countForFetchRequest],因为我在Core Data中有一组存储在字符串中的URL,我必须先将它们分开以获得正确的数量。
感谢您的帮助。
答案 0 :(得分:0)
您的代码非常混乱,主要是因为您使用的是奇怪的变量名称。例如,resultString
是NSArray
。您调用的另一个数组count
。数组的描述将以括号开头和结尾,所以这肯定不是你想要的。
因此,如果您的结果为零,则代码中会发生这种情况
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:nil];
// results is () - an empty array
NSArray *resultString = [results valueForKey:@"url"];
// resultString is () - an empty array
NSString *string = [resultString description];
// string contains "()" or something like that
NSArray *count = [string componentsSeparatedByString:@","];
// count contains ( "()" ) - an array with one string
count.count
为1
,stringValue
为@"1"
。
要解决此问题,您可以先检查results.count
,然后相应地做出反应,如果它是0。