2011-07-07 28 views
5

Vì một lý do nào đó, tất cả thuộc tính đã nhập NSString đang được trả về dưới dạng NSArrays trong đối tượng Bài viết của tôi. Đây là chức năng của tôi để lấy chúng: Dữ liệu chính trả về NSArrays thay vì NSStrings

- (NSArray *)getSavedArticles 
{ 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    NSError *error = nil; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 
    NSSortDescriptor *dateSort = [NSSortDescriptor sortDescriptorWithKey:@"last_opened" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:dateSort]]; 
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]; 
    return fetchedObjects; 
}
Tôi đã không tạo ra một NSManagedObjectModel cho những điều này, và thay vào đó tôi chỉ truy cập chúng bằng cách sử dụng KVO.

//self.data has the array returned from getSavedArticles 
NSManagedObject *object = [self.data objectAtIndex:indexPath.row]; 
NSString *path = [object valueForKey:@"path"]; 
NSString* id  = [object valueForKey:@"id"]; 

Khi tôi xem xét điều này trong cửa sổ biến, trên pathid tôi thấy (__NSArrayI *) ... Variable is not a CFString. In mô tả của một trong những cũng in ra ngoặc sử dụng khi in mảng.

Tôi chỉ tự hỏi liệu điều này có thể là do bộ mô tả sắp xếp không? Tôi đã kiểm tra kỹ xem dữ liệu đi vào các đối tượng này có được nhập chính xác hay không và cơ sở dữ liệu SQLite mà tôi đang sử dụng để sao lưu mọi thứ đang hiển thị chuỗi.

Tôi đã thử cài đặt lại ứng dụng trong trình mô phỏng và đặt lại ứng dụng. Tôi vẫn nhận được một NSArray thay vì một NSString.

Tôi thực sự không biết điều gì đang xảy ra ở đây. Bất kỳ trợ giúp sẽ được đánh giá cao.

CHỈNH SỬA: Tôi vừa tìm thấy điều gì đó thú vị khác. Tôi thực hiện một kiểm tra khác để xem một Điều đã được lưu chưa, và lần này tôi không nhận được NSArray cho đường dẫn bài viết:

- (NSString *)hasArticleSaved:(NSString *)id 
{ 
    NSString *path = nil; 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @"id", id]]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 
    NSError *error = nil; 
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]; 
    if (fetchedObjects.count > 0) { 
     NSManagedObject *savedArticle = [fetchedObjects objectAtIndex:0]; 
     path = [savedArticle valueForKey:@"path"]; 
    } 
    return path; 
}

Bây giờ tôi thực sự bối rối. Có ai không?

Trả lời

0

Tôi đã tìm thấy sự cố. Tôi đã thay đổi cấu trúc dữ liệu cho bảng của tôi vì vậy self.data là một mảng các mảng ... và chỉ với 1 đối tượng có vẻ như tôi đã nhận được một NSArray trở lại khi thực tế tôi đã truy cập dữ liệu sai. Tôi chỉ cần làm [[self.data objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

0

Vấn đề của bạn là ở đây:

[self.data objectForKey:indexPath.row] 

... vì objectForKey: đang tìm kiếm một chuỗi tên chính ví dụ "đường dẫn" hoặc "id". Cho nó một số nguyên sẽ tạo ra một lỗi hoặc trả về ngẫu nhiên.

Thay vào đó, bạn muốn:

[self.data objectAtIndex:indexPath.row] 

... mà sẽ trả lại đối tượng được quản lý tại các chỉ số được đưa ra trong mảng.

+0

Rất tiếc! Đó là một lỗi đánh máy trong câu hỏi. Tôi đang sử dụng objectAtIndex. Đang sửa ngay bây giờ. – MishieMoo

+0

Vâng, tôi đã tự hỏi làm thế nào mà thậm chí biên dịch. – TechZen

Các vấn đề liên quan