2015-11-17 77 views
1

我有一个已发布的应用程序,现在我想要构建一个手表扩展,它只会在手表上显示填充了来自我的核心数据存储的数据的表。现在非常简单。所以我基本上试图使用我的应用程序tableviewcontroller修改为手表扩展的代码。我拥有应用程序组,并创建了应用程序和手表扩展可以访问的核心数据类。尽管在基于调试日志的手表扩展中这似乎工作正常,但我在手表上运行应用程序时,手表中没有任何数据。代码和调试日志都低于:WatchKit,核心数据和表格

InterfaceController.h

#import <WatchKit/WatchKit.h> 
#import <Foundation/Foundation.h> 
#import "CoreDataHelper.h" 

@interface InterfaceController : WKInterfaceController 

@property (strong, nonatomic) IBOutlet WKInterfaceTable *table; 
@property (strong, nonatomic) NSArray *objects; 

@end 

InterfaceController.m:

#import "InterfaceController.h" 
#import "ScheduleTableRow.h" 

@interface InterfaceController() 

@end 

@implementation InterfaceController 

@synthesize objects; 

- (void)awakeWithContext:(id)context { 
[super awakeWithContext:context]; 

// Configure interface objects here. 

NSManagedObjectContext * managedContext = [[CoreDataHelper sharedHelper] context]; 

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cschedule" inManagedObjectContext:managedContext]; 

NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:managedContext]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

[fetchRequest setEntity:entity]; 

NSArray *myResults = [managedContext executeFetchRequest:fetchRequest error:nil]; 

self.objects = myResults; 

NSLog(@"Results count: %lu", (unsigned long)myResults.count); 

[self.table setNumberOfRows:myResults.count withRowType:@"ScheduleTableRow"]; 

for (object in myResults) { 

    ScheduleTableRow *scheduleRow = [self.table rowControllerAtIndex:[myResults indexOfObject:object]]; 
    [scheduleRow.name setText:[NSString stringWithFormat:@"%@",[object valueForKey:@"day"]]]; 
    [scheduleRow.date setText:[NSString stringWithFormat:@"%@",[object valueForKey:@"date"]]]; 
} 

} 

- (void)willActivate { 
// This method is called when watch view controller is about to be visible to user 
[super willActivate]; 
} 

- (void)didDeactivate { 
// This method is called when watch view controller is no longer visible 
[super didDeactivate]; 
} 

@end 

调试日志:

2015-11-17 15:07:12.143 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'init' 
2015-11-17 15:07:12.148 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'setupCoreData' 
2015-11-17 15:07:12.148 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'loadStore' 
2015-11-17 15:07:12.148 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'storeURL' 
2015-11-17 15:07:12.148 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'applicationStoresDirectory' 
2015-11-17 15:07:12.148 canada2016Watch Extension[89456:1406057] Running CoreDataHelper 'applicationDocumentsDirectory' 
2015-11-17 15:07:12.159 canada2016Watch Extension[89456:1406057] Successfully added store: <NSSQLCore: 0x7b8692b0> (URL: file:///Users/barry/Library/Developer/CoreSimulator/Devices/E7C26A87-B22C-45C5-9AE3-18CB24393EA9/data/Containers/Data/PluginKitPlugin/6717F002-7F1B-44EB-8C9F-861B6CF01E08/Documents/Stores/group.org.bicsi.canada2016app) 
2015-11-17 15:07:12.160 canada2016Watch Extension[89456:1406057] Results count: 1 

回答

1

也许你误解了rowControllerAtIndex方法。此方法是将行添加到表的实际位置。相反,您将索引引用为indexOfObject,但该表尚没有任何对象。

相反,您应该遍历索引,为每一行创建一个项目并使用适当的对象填充它。

for (int i = 0; i < self.objects.count; i++) { 
    ScheduleTableRow *scheduleRow = [self.table rowControllerAtIndex:i]; 
    NSManagedObject *item = self.objects[i]; 
    scheduleRow.name.text = [item valueForKey:@"day"]; 
    scheduleRow.date.text = [item valueForKey:@"date"]; 
} 

在很多雨燕

更优雅
for (idx, object) in self.objects.enumerate() { 
    let scheduleRow = self.table.rowControllerAtIndex(idx) 
    scheduleRow.name.text = object.valueForKey("day") 
    scheduleRow.date.text = object.valueForKey("date") 
} 
+0

当我用上面的代码仍然没有看到任何数据。为了确保数据在核心数据存储中,我添加了一些NSLog调用来指示是否从数据源(Web服务调用)创建并存储在核心数据存储中的任何数据,并且日志显示数据正在储存。但是,结果数组数显示为0,所以表代码可能正常工作,这是产生结果的代码是问题。我会继续尝试找到问题。 – bachma0507

+0

我发现问题的结果。我修好后,这工作。谢谢! – bachma0507