私はこのmanagedContextObjectを持っています。View Controllerから別のControllerに渡したいと思います。 CatalogueViewControllerと呼ばれるビューコントローラから、これは問題なく正常に動作します。そして、これは無問題のコードです:managedContextObjectはobjective-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。問題はありません。
BUT!私は同じdetailsItemViewControllerに同じことを通過しようとする(唯一の違いは、私はCartViewControllerと呼ばれる別のビューコントローラからそれを行うことである)、これはコードである:detailsItemViewController:線上
- (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];
}
}
.managedObjectContext = self.managedObjectContext; Xcodeからこのエラーメッセージが表示されます:
[...]CartViewController.m: error: Semantic Issue: Property 'managedObjectContext' not found on object of type 'DetailsItemViewController *'
明らかにそうではありません!
なぜですか?
ただ、明確にすべき:
私はCartViewControllerでDetailsItemViewController.hの#importを作る:
#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を。の作業。このすべての行は全く問題なく動作します:私は別のdetailsItemViewControllerのプロパティをピックアップしてみた場合
UINavigationController *navigationController = segue.destinationViewController; // <---- WORKS
DetailsItemViewController *detailsItemViewController = (DetailsItemViewController *) navigationController.topViewController; // <---- WORKS
detailsItemViewController.productToEdit = sender; // <---- WORKS
実際には、例えば、それがうまく機能します!私が行う場合にのみ 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