即使获取的对象为零,Core Data也会返回1

时间:2013-11-22 20:46:40

标签: uitableview core-data nsarray nsfetchrequest

我在我的应用程序中犯了一个奇怪的错误,我不知道它为什么会这样做。如果实体中有超过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,我必须先将它们分开以获得正确的数量。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码非常混乱,主要是因为您使用的是奇怪的变量名称。例如,resultStringNSArray。您调用的另一个数组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.count1stringValue@"1"

要解决此问题,您可以先检查results.count,然后相应地做出反应,如果它是0。