Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “需要修复代码中的错误”;财产';managedObjectContext';在类型为';id'&引用;_Ios_Objective C - Fatal编程技术网

Ios “需要修复代码中的错误”;财产';managedObjectContext';在类型为';id'&引用;

Ios “需要修复代码中的错误”;财产';managedObjectContext';在类型为';id'&引用;,ios,objective-c,Ios,Objective C,我正在为我的类编写这段代码,我被卡住了,错误是“在类型为“id”的对象上找不到属性“managedObjectContext” 它属于以下代码行: if (![self.detailItem.managedObjectContext save:&error]) 我知道在前面的代码中,我将newDetailItem设置为type id?: - (void)setDetailItem:(id)newDetailItem { if (_detailItem != newDetail

我正在为我的类编写这段代码,我被卡住了,错误是“在类型为“id”的对象上找不到属性“managedObjectContext”

它属于以下代码行:

if (![self.detailItem.managedObjectContext save:&error]) 
我知道在前面的代码中,我将newDetailItem设置为type id?:

- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }

    if (self.masterPopoverController != nil) {
        [self.masterPopoverController dismissPopoverAnimated:YES];
    }        
}
下面是我现在的完整代码:

#import "cavDetailViewController.h"


@interface cavDetailViewController ()
<UIAlertViewDelegate, UIActionSheetDelegate>
{
    UIAlertView *message;
}

@property (strong, nonatomic) UIPopoverController *masterPopoverController;
- (void)configureView;
@end

@implementation cavDetailViewController

#pragma mark - Managing the detail item

- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view.
        [self configureView];
    }

    if (self.masterPopoverController != nil) {
        [self.masterPopoverController dismissPopoverAnimated:YES];
    }        
}

- (void)configureView
{
    // Update the user interface for the detail item.

    if (self.detailItem) {
        self.detailDescriptionLabel.text = [[self.detailItem valueForKey:@"timeStamp"] description];
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)hideKeyboard:(id) sender
{
    [self.lattitude resignFirstResponder];
    [self.longitude resignFirstResponder];
    [self.description resignFirstResponder];
}

- (void) viewWillDisappear:(BOOL) pAnimated {
    [super viewWillDisappear:pAnimated];

    [self.detailItem setValue:self.lattitude.text    forKey:@"Lattitude"];
    [self.detailItem setValue:self.longitude.text    forKey:@"Longitude"];
    [self.detailItem setValue:self.description.text    forKey:@"Description"];

    NSNumber * v = [NSNumber numberWithDouble:[self.lattitude.text doubleValue]];
    NSNumber * v1 = [NSNumber numberWithDouble:[self.longitude.text doubleValue]];


    [self.detailItem setValue:v forKey:@"Lattitude"];
    [self.detailItem setValue:v1 forKey:@"Longitude"];

    // ND: do the update - ala master view code
    NSError *error = nil;
    if (![self.detailItem.managedObjectContext save:&error]) {
        // Replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate.
        // You should not use this function in a shipping application, although it may be useful during development.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }


} // end method veiwWillDisappear

#pragma mark - Split view

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
    barButtonItem.title = NSLocalizedString(@"Master", @"Master");
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
    self.masterPopoverController = popoverController;
}

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    // Called when the view is shown again in the split view, invalidating the button and popover controller.
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
    self.masterPopoverController = nil;
}

- (IBAction)bgroundColor:(id)sender
{
    [[self view] setBackgroundColor:[UIColor blueColor] ];
    [[self view] setBackgroundColor:[UIColor redColor] ];    

}



- (IBAction)dispMessage:(id)sender
{
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Have a nice day"
                                                      message:@"Have a nice day"
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];

}
@end
#导入“cavDetailViewController.h”
@接口CAVTailViewController()
{
UIAlertView*消息;
}
@属性(强,非原子)UIPopoverController*主PopOvercontroller;
-(void)配置视图;
@结束
@详细视图控制器的实现
#pragma标记-管理详细信息项
-(void)setDetailItem:(id)newDetailItem
{
如果(_detailItem!=newDetailItem){
_detailItem=newDetailItem;
//更新视图。
[自配置视图];
}
如果(self.masterPopoverController!=nil){
[self.masterPopoverController解除动画:是];
}        
}
-(无效)配置视图
{
//更新详细信息项的用户界面。
if(self.detailItem){
self.detailDescriptionLabel.text=[[self.detailItem valueForKey:@“timeStamp”]说明];
}
}
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
[自配置视图];
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(iAction)隐藏板:(id)发送方
{
[自我辞职第一响应者];
[自我辞职第一响应者];
[自我描述辞职第一响应者];
}
-(无效)视图将消失:(BOOL)平移{
[超级视图将消失:平移];
[self.detailItem setValue:self.latitude.text forKey:@“latitude”];
[self.detailItem setValue:self.longitude.text forKey:@“longitude”];
[self.detailItem setValue:self.description.text forKey:@“description”];
NSNumber*v=[NSNumber numberWithDouble:[self.latitude.text doubleValue]];
NSNumber*v1=[NSNumber numberWithDouble:[self.longitude.text doubleValue]];
[self.detailItem setValue:v forKey:@“latitude”];
[self.detailItem设置值:v1 forKey:@“经度”];
//ND:执行更新-ala主视图代码
n错误*错误=nil;
如果(![self.detailItem.managedObjectContext保存:&错误]){
//将此实现替换为适当处理错误的代码。
//abort()导致应用程序生成崩溃日志并终止。
//您不应该在装运应用程序中使用此函数,尽管它在开发过程中可能很有用。
NSLog(@“未解决的错误%@,%@”,错误,[error userInfo]);
中止();
}
}//结束方法将消失
#pragma标记-拆分视图
-(void)splitViewController:(UISplitViewController*)splitController将隐藏设备控制器:(UIViewController*)带有barButtonItem的viewController:(UIBarButtonItem*)用于popoverController的barButtonItem:(UIPopoverController*)popoverController
{
barButtonItem.title=NSLocalizedString(@“主控”,@“主控”);
[self.navigationItem setLeftBarButtonItem:barButtonItem动画:是];
self.masterPopoverController=popoverController;
}
-(void)splitViewController:(UISplitViewController*)splitController将显示viewController:(UIViewController*)viewController使barButtonItem无效:(UIBarButtonItem*)barButtonItem
{
//在拆分视图中再次显示视图时调用,使按钮和popover控制器无效。
[self.navigationItem setLeftBarButtonItem:nil动画:是];
self.masterPopoverController=nil;
}
-(iAction)bgroundColor:(id)发送方
{
[[self-view]setBackgroundColor:[UIColor blueColor]];
[[self view]setBackgroundColor:[UIColor redColor]];
}
-(iAction)dispMessage:(id)发件人
{
UIAlertView*消息=[[UIAlertView alloc]initWithTitle:@“祝您有愉快的一天”
信息:@“祝您有愉快的一天”
代表:无
取消按钮:@“确定”
其他按钮:无];
}
@结束

您的
detailItem
属性声明类型为
id
。您应该执行以下操作之一:

  • 使用公开
    managedObjectContext
    属性的类型声明它,或
  • 向公开
    managedObjectContext
    属性的类添加类型转换
    self.detailItem
    ,或
  • 将语法更改为作为方法调用
    managedObjectContext
最后一个更改可以这样做:

NSError *error = nil;
if (![[self.detailItem managedObjectContext] save:&error])

为了使其正常工作,您的.m文件需要包含公开
managedObjectContext
属性的类的标题。

请详细说明.m文件(这是我发布的,而不是.h文件)中有关您所做的类注释标题的内容。在.h文件中,我设置了如下属性:@property(强,非原子)id detailItem;我正在查找,我找不到它。我对此感到非常失望,我还有更多的东西要写,但在这部分修复之前我无法继续……我有DetailViewController.m文件,就是这个文件,我有MasetrViewController文件,还有这两个文件的.h文件。我知道作为一个新程序,我一定很沮丧我做了一个“在项目中查找”搜索,它只找到了setDetailItem的两个引用,其中一个是:-(void)setDetailItem:(id)newDetailItem,它在DetailViewController.m文件中,另一个在MasterViewController.m中,用于segue:-(void)prepareforsgue:(UIStoryboardSegue*)segue sender:(id)sender{if([[segue identifier]IseQualtString:@“showDetail”]{NSIndexPath*indexPath=[self.tableView indexPathForSelectedRow];NSManagedObject*obje