У меня есть managedContextObject. Я хочу перейти с контроллера представления на другой. Из контроллера вида, называемого CatalogueViewController, это отлично работает без проблем. И это код не-проблема:managedContextObject, проходящий ошибка в объекте-c
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddItem"]) {
UINavigationController *navigationController = segue.destinationViewController;
DetailsItemViewController *detailsItemViewController = (DetailsItemViewController *) navigationController.topViewController;
detailsItemViewController.delegate = self;
detailsItemViewController.productToAdd = sender; //Mando il prodotto che ha provocato la segue (fatto manulamente sopra in didSelectRowAtIndexPath).
detailsItemViewController.index = [prodotti.productsArray indexOfObject:sender];
detailsItemViewController.managedObjectContext = self.managedObjectContext; //Gli passo anche l'oggetto per registrare i prodotti aggiunti in core data.
NSLog(@"::::::::::::INDICE DELL'OGGETTO: %d", [prodotti.productsArray indexOfObject:sender]);
//delegato, vado ad aggiungere i metodi delegati
}
}
И линия detailsItemViewController.managedObjectContext = self.managedObjectContext; не имеет проблем.
НО! Когда я пытаюсь передать ЖЕ ВЕЩЬ к ЖЕ detailsItemViewController (единственное отличие состоит в том, что я делаю это из другого контроллера представления под названием CartViewController) и это код:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"EditItem"]) {
UINavigationController *navigationController = segue.destinationViewController;
DetailsItemViewController *detailsItemViewController = (DetailsItemViewController *) navigationController.topViewController;
detailsItemViewController.productToEdit = sender; //Mando il prodotto che ha provocato la segue (fatto manulamente sopra in didSelectRowAtIndexPath.
detailsItemViewController.managedObjectContext = self.managedObjectContext; //Gli passo anche l'oggetto per registrare i prodotti aggiunti in core data.
//Mi metto in ascolto di una notifica tramite il Notification Center.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(objectEditedFromDetailsViewController:)
name:@"ObjectEdited"
object:nil];
}
}
на линии: detailsItemViewController .managedObjectContext = self.managedObjectContext; Xcode дает мне сообщение об ошибке:
[...]CartViewController.m: error: Semantic Issue: Property 'managedObjectContext' not found on object of type 'DetailsItemViewController *'
, что, очевидно, это не так!
ПОЧЕМУ ?!
Просто чтобы быть ясно:
Я делаю #import из DetailsItemViewController.h в CartViewController:
#import "CartViewController.h"
#import "Product.h"
#import "CartCell.h"
#import "CDProduct.h"
#import "DetailsItemViewController.h"
#import "UIImage+Resize.h"
@implementation CartViewController {
Все линии, но detailsItemViewController.managedObjectContext = self.managedObjectContext; работа. Все эти линии работают без проблем вообще:
UINavigationController *navigationController = segue.destinationViewController; // <---- WORKS
DetailsItemViewController *detailsItemViewController = (DetailsItemViewController *) navigationController.topViewController; // <---- WORKS
detailsItemViewController.productToEdit = sender; // <---- WORKS
В самом деле, например, если я пытаюсь забрать собственность другого detailsItemViewController в это хорошо работает! Только если я делаю detailsItemViewController.managedObjectContext = self.managedObjectContext; Я получаю сообщение об ошибке от Xcode.
А вот DetailsItemViewController.h
#import <UIKit/UIKit.h>
#import "Product.h"
#import "ProductDetails.h"
#import "CDProduct.h"
//Delegato per lo screen successivo di aggiunta roba nel carrello.
@class DetailsItemViewController;
@class CatalogueItem;
@protocol DetailsItemViewControllerDelegate <NSObject>
- (void)detailsViewControllerDidCancel:(DetailsItemViewController *)controller;
- (void)detailsViewControllerDidDone:(DetailsItemViewController *)controller didFinishAddingItem:(CatalogueItem *)item;
@end
//@class Product;
//@class ProductDetails;
@interface DetailsItemViewController : UIViewController <NSURLConnectionDelegate>
@property (nonatomic, weak) id <DetailsItemViewControllerDelegate> delegate;
@property (nonatomic, strong) Product *productToAdd; //Li differenzio così capisco quello che devo fare. NB: per chi legge questo codice:productToAdd non indica un oggetto da aggiungere ma un oggetto a cui si può modificare la quantità per aggiungerlo al carrello.
@property (nonatomic, strong) CDProduct *productToEdit;
@property (nonatomic, strong) ProductDetails *productToShow; //Qui ci metto il prodotto che ricavo da loadProducts.
@property (strong, nonatomic) IBOutlet UIImageView *graphicImage;
@property (strong, nonatomic) IBOutlet UIImageView *overviewImage;
@property (strong, nonatomic) IBOutlet UIStepper *stepper;
@property (strong, nonatomic) IBOutlet UILabel *stepperValueLabel;
@property (strong, nonatomic) IBOutlet UILabel *productNameLabel;
@property (strong, nonatomic) IBOutlet UILabel *priceLabel; //Il prezzo poi lo prendo facendo il parsing di un altra pagina.
@property (strong, nonatomic) IBOutlet UILabel *totalPrice;
@property (nonatomic, assign) int index; //In questa property ci metto l'indice dell'oggetto passato (productToAdd) in modo sapere che articolo dell'XML parsare.
@property (nonatomic, strong) NSMutableData *receivedData;
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; //Per registrare i prodotti in core data.
- (IBAction)cancel;
- (IBAction)done;
- (IBAction)changeValue:(UIStepper *)sender;
@end
Не разрешает вашу проблему, но если 'productToEdit' является NSManagedObject (или подклассом), то он уже содержит ссылку на ваш контекст управляемого объекта, поэтому вам не нужно передавать его отдельно (' productToEdit.managedObjectContext'). – jrturton
Да, это не решает мою проблему, НО это очень полезно знать! Большое спасибо, я не думал об этом ^^ – iLeW
Можете ли вы включить заголовок DetailsItemViewController в свой вопрос? – jrturton