Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Iphone iCloud和CoreData_Iphone_Objective C_Ipad_Core Data_Icloud - Fatal编程技术网

Iphone iCloud和CoreData

Iphone iCloud和CoreData,iphone,objective-c,ipad,core-data,icloud,Iphone,Objective C,Ipad,Core Data,Icloud,我正在尝试在iOS应用程序中使用iCloud。我的应用程序可以在单个设备上运行,但当我添加iCloud时,什么也没发生。我浏览了整个网络,只找到了一个我不理解的例子。我的应用程序是iOS 5.0,使用核心数据存储页面。下面是我的应用程序代理和我的视图,我在其中显示它。很抱歉在iPhone开发方面缺乏相关知识。请提供帮助。 多谢各位 如果有人知道/拥有一个完整的iCloud+CoreData项目,我相信我能找到答案。现在我只是有代码剪贴,我甚至不知道他们是怎么被调用的。。。如果我有一个完整的项目

我正在尝试在iOS应用程序中使用iCloud。我的应用程序可以在单个设备上运行,但当我添加iCloud时,什么也没发生。我浏览了整个网络,只找到了一个我不理解的例子。我的应用程序是iOS 5.0,使用核心数据存储页面。下面是我的应用程序代理和我的视图,我在其中显示它。很抱歉在iPhone开发方面缺乏相关知识。请提供帮助。

多谢各位


如果有人知道/拥有一个完整的iCloud+CoreData项目,我相信我能找到答案。现在我只是有代码剪贴,我甚至不知道他们是怎么被调用的。。。如果我有一个完整的项目,我可以逐步完成它,这样我就可以完全理解它是如何工作的

问题是我认为没有调用任何东西来用数据更新视图,我也不相信它会将数据发送到云,但我不知道该调用什么

PageFlipperAppDelegate.h

    #import <UIKit/UIKit.h>
    #import "PageView.h"
    #import "SlideShowViewController.h"
    #import "PagesCollectionViewController.h"
    #import "UiWindowSubclass.h"

    @interface PageFlipperAppDelegate : UIResponder <UIApplicationDelegate>

    @property (nonatomic, retain) IBOutlet UIWindow *window;

    @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
    @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
    @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    @property (nonatomic, retain, readonly) PagesCollectionViewController *collectionViewController;
    - (void)saveContext;
    - (NSURL *)applicationDocumentsDirectory;

    @end
viewController.h

    #import <Foundation/Foundation.h>
    #import "CollectionViewController.h"
    #import "SlideShowViewController.h"
    #import "PagesDataSource.h"
    #import "PageView.h"
    #import "PageViewController.h"
    #import "PrototypeView.h"
    #import "QuickStart.h"

    @interface PagesCollectionViewController : CollectionViewController<quickStartDismiss,NSFetchedResultsControllerDelegate>
    {
        PagesDataSource *dataSource;
        PageViewController *viewController;
    @private NSFetchedResultsController *fetchedResultsController__ ;
    @private  NSManagedObjectContext *managedObjectContext__;
    }
    @property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
    @property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
    - (id)initWithManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;
    - (IBAction)add:(id)sender;
    -(void)setShadowAndColor;
    -(void)playSlideShow;

    @property (nonatomic, readwrite, assign) BOOL editMode;
    @end

    @interface PageView (CollectionViewItem)
    - (void)setRepresentedObject:(PVPage *)representedObject;
    - (PVPage *)representedObject;
    -(void)didHoldItem;
    -(void)duplicatePage;
    @end


    @interface PushController : UIViewController
    {}
    @end

    @interface toolBar : UIToolbar
    @end
#导入
#导入“CollectionViewController.h”
#导入“SlideShowViewController.h”
#导入“PagesDataSource.h”
#导入“PageView.h”
#导入“PageViewController.h”
#导入“PrototypeView.h”
#导入“QuickStart.h”
@界面页面CollectionViewController:CollectionViewController
{
PagesDataSource*数据源;
页面视图控制器*视图控制器;
@私有NSFetchedResultsController*fetchedResultsController\uuuux;
@私有NSManagedObjectContext*managedObjectContext_uuux;
}
@属性(非原子,保留)NSFetchedResultsController*fetchedResultsController;
@属性(非原子,保留)NSManagedObjectContext*managedObjectContext;
-(id)initWithManagedObjectContext:(NSManagedObjectContext*)managedObjectContext;
-(iAction)添加:(id)发件人;
-(无效)设置阴影和颜色;
-(无效)播放幻灯片;
@属性(非原子、读写、赋值)BOOL editMode;
@结束
@界面页面视图(CollectionViewItem)
-(void)setRepresentedObject:(PVPage*)representedObject;
-(PVPage*)代表对象;
-(无效)该项;
-(无效)重复页;
@结束
@接口控制器:UIViewController
{}
@结束
@界面工具栏:UIToolbar
@结束
viewController.m

    #import "PagesCollectionViewController.h"
    #import "PageFlipperAppDelegate.h"
    @implementation toolBar
    - (void)drawRect:(CGRect)rect {}
    @end
    @implementation PagesCollectionViewController
    @synthesize editMode;
    @synthesize fetchedResultsController=__fetchedResultsController;
    @synthesize managedObjectContext=__managedObjectContext;
    -(void)viewWillAppear:(BOOL)animated{
        if (![[NSUserDefaults standardUserDefaults] integerForKey:@"integerKey"]) {
            [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"integerKey"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            QuickStart*stickieViewController = [[[QuickStart alloc]init]autorelease];
            stickieViewController.delegate = self;
            stickieViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
            [self presentModalViewController:stickieViewController animated:YES];
        }

        [[self navigationController] setNavigationBarHidden:NO animated:NO];
        [[self navigationController] setToolbarHidden:NO animated:NO];
        [[[self navigationController] toolbar] setBarStyle:UIBarStyleBlackTranslucent];
        [self setToolbarItems:[NSArray arrayWithObjects:
                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],

                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playSlideShow)]autorelease],

                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
                               nil]];

        [(CollectionView*)[self view] setCanReloadData:YES];
        [(CollectionView*)[self view]layoutSubviews];

    }
    - (NSFetchedResultsController *)fetchedResultsController
    {
        if (__fetchedResultsController != nil)
        {
            return __fetchedResultsController;
        }

        /*
         Set up the fetched results controller.
         */
        // Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Page" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        // Set the batch size to a suitable number.
        [fetchRequest setFetchBatchSize:20];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"<sort key>" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorName, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Edit the section name key path and cache name if appropriate.
        // nil for section name key path means "no sections".
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"<section name key path>" cacheName:@"<cache name>"];
        aFetchedResultsController.delegate = self;

        self.fetchedResultsController = aFetchedResultsController;

        [aFetchedResultsController release];
        [fetchRequest release];
        [sortDescriptorName release];
        [sortDescriptors release];

        NSError *error = nil;
        if (![self.fetchedResultsController performFetch:&error])
        {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }

        return __fetchedResultsController;
    }


    // because the app delegate now loads the NSPersistentStore into the NSPersistentStoreCoordinator asynchronously
    // we will see the NSManagedObjectContext set up before any persistent stores are registered
    // we will need to fetch again after the persistent store is loaded
    - (void)reloadFetchedResults:(NSNotification*)note {
        NSError *error = nil;
        if (![[self fetchedResultsController] performFetch:&error]) {

            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }             

        if (note) {
            [(CollectionView*)[self view] setCanReloadData:YES];
            [(CollectionView*)[self view]layoutSubviews];
        }
    }
    -(void) playSlideShow{
        SlideShowViewController *slideShowViewController = [[[SlideShowViewController alloc] init]autorelease];
        NSMutableArray *tempArrayOfImages = [[[NSMutableArray alloc] init]autorelease];
        for (int i = 0; i < [[dataSource pages]count]; i++) {
            if ([[[dataSource pages] objectAtIndex:i] thumbnail] != nil) {
                [tempArrayOfImages addObject: [[[dataSource pages] objectAtIndex:i] thumbnail]];
            }

        }

        [[self navigationController] pushViewController:slideShowViewController animated:YES];
        [slideShowViewController setImagesInImageViewer:tempArrayOfImages];
    }
    -(void)dismissQuickStart{
        [self dismissModalViewControllerAnimated:YES];
    }
    - (id)initWithManagedObjectContext:(NSManagedObjectContext *)managedObjectContext
    {
        if ((self = [super initWithNibName:@"CollectionView" bundle:nil]))
        {
            if (editMode == NO) {
                [self finishEditToolBars];
            }
            [self setTitle:@"Doodles"];
            viewController = [[PageViewController alloc] initWithManagedObjectContext:managedObjectContext];
            dataSource = [[PagesDataSource alloc] initWithManagedObjectContext:managedObjectContext];
            CGSize itemViewMarginSize = CGSizeMake(25.0, 0.0);
            [(CollectionView *)[self view] setItemViewMarginSize:itemViewMarginSize];
            PrototypeView *pro = [[[PrototypeView alloc] init] autorelease];
            [(CollectionView *)[self view] setItemViewPrototype:pro];
            [(CollectionView *)[self view] setFlowDirection:CVFlowDirectionVertical];
            [(CollectionView *)[self view] setItemViewFrameSize:CGSizeMake(([(CollectionView *)[self view] bounds].size.width - 3*itemViewMarginSize.width)/3.4, ([(CollectionView *)[self view] bounds].size.height - 3*itemViewMarginSize.height)/3.6)];
            [self setShadowAndColor];
        }
        return self;
    }
    -(void)setShadowAndColor{
        CollectionView *collectionView = (CollectionView *)[self view];
        [collectionView setShadowColor:[UIColor blackColor]];
        [collectionView setShadowRadius:6.0f];
        [collectionView setShadowOpacity:0.5f];
    }

    - (void)add:(id)sender
    {

        [dataSource add:sender];
        CollectionView *collectionView = (CollectionView *)[self view];
        // [collectionView reloadData];
        //  [collectionView scrollItemIndexToVisible:[self countOfItemsInCollectionView:collectionView]-1 animated:NO];

        [collectionView.dataDelegate collectionView:collectionView didSelectItemAtIndex:[self countOfItemsInCollectionView:collectionView]-1];
        //CollectionViewController *c;
        //   [[c transitionToDetailViewController:[c collectionView:self detailViewControllerForItemAtIndex:(NSUInteger)[self countOfItemsInCollectionView:collectionView]-1] forItemView:[itemViews objectForKey:[NSString stringWithFormat:@"%u", [self countOfItemsInCollectionView:collectionView]-1]]]];
        //  [c transitionToDetailViewController:self forItemView:collectionView.itemViews;
        editMode = NO;
        //collectionView.canUpdateLayout = YES;
        collectionView.canReloadData = YES;
        [(CollectionView*)[self view]layoutSubviews];



    }


    - (NSUInteger)countOfItemsInCollectionView:(CollectionView *)collectionView { return [[dataSource pages] count]; }

    - (id)collectionView:(CollectionView *)collectionView representedObjectAtIndex:(NSUInteger)itemIndex { 
        return [[dataSource pages] objectAtIndex:itemIndex]; 
    }

    - (void)collectionView:(CollectionView *)collectionView didSelectItemAtIndex:(NSUInteger)itemIndex
    {

        if (editMode == YES) {
            [collectionView yellowdidSelectItemAtIndex:itemIndex];
            //  NSLog(@"edit");
        }else{

            PVPage *selectedPage = [[[dataSource pages] objectAtIndex:itemIndex]autorelease];
            PageView *pageView = [[[PageView alloc] init] autorelease];
            [pageView setRepresentedPage:selectedPage];

            //   UIImage *i = [UIImage imageWithData: [[pageView representedPage] thumbnail]];
            // UIImageView *ii = [[[UIImageView alloc] initWithImage:i]autorelease];

            [viewController setView:pageView];
            //  [(PageView*)[viewController view] setBackgroundStrokes:ii];
            //NSLog(@"selected page %@",selectedPage);
            // [[[self navigationController] toolbar] setHidden:YES];
            //   [[[self navigationController] navigationBar] setHidden:YES];   
            //   [[[self tabBarController] tabBar] setHidden:YES]; 
            PageFlipperAppDelegate *appDelegate = (PageFlipperAppDelegate *)[[UIApplication sharedApplication] delegate];
            //  [(UiWindowSubclass *)appDelegate.window startTimer];
            [(UINavigationController *)[(UiWindowSubclass*)[appDelegate window] rootViewController] pushViewController:viewController animated:YES];
            //  viewController = nil;
            // [[self navigationController] setToolbarHidden:NO];
        }    
    }
    - (BOOL)collectionView:(CollectionView *)collectionView canDeleteItemAtIndex:(NSUInteger)itemIndex { 
        NSLog(@"itemIndex %u",itemIndex); 
        return YES; 

    }

    - (void)collectionView:(CollectionView *)collectionView didDeleteItemAtIndex:(NSUInteger)itemIndex
    {
        [dataSource removePageAtIndex:itemIndex];
    }


    -(void)trash{
        // NSLog(@"trash");
        [(CollectionView *)[self view] trashitems];
    }
    -(void)done{

        [(CollectionView *)[self view]  yellowdidSelectItemAtIndexUndo];
        [(CollectionView *)[self view] shakedidRemoveSelectItemAtIndex];
        [(CollectionView *)[self view] donereset];
        [self finishEditToolBars];

    }
    -(void) finishEditToolBars{
        [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)] autorelease]];
        [[self navigationItem] setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(didHoldItem)] autorelease]];

        editMode = NO;
    }
    -(void)duplicatePage{
        NSArray *tempArray = [[[(CollectionView*)[self view] selectedItemsArray]copy]autorelease];
        //    for (int i =0; i<[[(CollectionView*)[self view] selectedItemsArray]count]; i++) {
        //        [(CollectionView *)[self view]  yellowdidSelectItemAtIndex:i];
        //        
        //    }
        [dataSource duplicatePage:[[[NSArray alloc] initWithArray:tempArray]autorelease]];
        CollectionView *collectionView = (CollectionView *)[self view];
        editMode = NO;
        [self done];
        // [(CollectionView *)[self view]  yellowdidSelectItemAtIndexUndo];
        collectionView.canReloadData = YES;
        [collectionView layoutSubviews];



    }
    -(void)didHoldItem{
        [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)] autorelease]];
        //    [[self navigationItem] setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(trash)] autorelease]];
        toolBar* tools = [[toolBar alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)];
        tools.barStyle = UIBarStyleBlackTranslucent;
        tools.opaque = NO;
        //tools.backgroundColor = [UIColor clearColor];
        // create the array to hold the buttons, which then gets added to the toolbar
        NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

        // create a standard "add" button
        UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(trash)];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];
        [bi release];

        // create a spacer
        bi = [[UIBarButtonItem alloc]
              initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
        [buttons addObject:bi];
        [bi release];

        // create a standard "refresh" button
        bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(duplicatePage)];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];
        [bi release];

        // stick the buttons in the toolbar
        [tools setItems:buttons animated:NO];

        [buttons release];

        // and put the toolbar in the nav bar
        self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:tools] autorelease];
        [tools release];
        [(CollectionView*)[self view] setOldItemIndex:-1];
        editMode = YES;
        [(CollectionView*)[self view] setEditMode:YES];
        [(CollectionView*)[self view] shakedidSelectItemAtIndex];
    }
    -(void)didReceiveMemoryWarning{
        // NSLog(@"mem");
    }
    - (void)dealloc
    {   [dataSource release],dataSource = nil;
        [viewController release],viewController = nil;

        [super dealloc];
    }
    -(void)viewDidAppear:(BOOL)animated{

        [ (CollectionView*) [self view] setCanReloadData:YES];
        [(CollectionView*) [self view]  layoutSubviews];
    }
    -(void) viewDidLoad{

        CollectionView *collectionView = (CollectionView *)[self view];
        collectionView.canReloadData = YES;
        [(CollectionView*)[self view]layoutSubviews];
        editMode = NO;
        collectionView.editMode = NO;



    }
    @end
#导入“PagesCollectionViewController.h”
#导入“PageFlipperAppDelegate.h”
@实现工具栏
-(void)drawRect:(CGRect)rect{}
@结束
@实现页面CollectionViewController
@综合编辑模式;
@综合fetchedResultsController=\uu fetchedResultsController;
@综合managedObjectContext=u managedObjectContext;
-(无效)视图将显示:(BOOL)动画{
如果(![[NSUserDefaults standardUserDefaults]IntegerWorkey:@“integerKey”]){
[[NSUserDefaults standardUserDefaults]setInteger:1 forKey:@“integerKey”];
[[NSUserDefaults standardUserDefaults]同步];
QuickStart*stickieViewController=[[[QuickStart alloc]初始化]自动释放];
stickieViewController.delegate=self;
stickieViewController.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
[自呈现ModalViewController:stickieViewController动画:是];
}
[[self-navigationController]setNavigationBarHidden:无动画:无];
[[self-navigationController]设置工具栏隐藏:无动画:无];
[[[self-navigationController]工具栏]设置样式:UIBarStyleBlack半透明];
[self-setToolbarItems:[NSArray arrayWithObjects:
[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarbuttonSystemFlexibleSpace目标:无操作:无]自动释放],
[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarbuttonSystemTemplay目标:自我操作:@selector(播放幻灯片)]自动释放],
[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarbuttonSystemFlexibleSpace目标:无操作:无]自动释放],
无]];
[(CollectionView*)[self-view]设置可重新加载数据:是];
[(CollectionView*)[self view]布局子视图];
}
-(NSFetchedResultsController*)fetchedResultsController
{
如果(u fetchedResultsController!=nil)
{
返回uu fetchedResultsController;
}
/*
设置“获取结果”控制器。
*/
//为实体创建获取请求。
NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
//根据需要编辑实体名称。
NSEntityDescription*entity=[NSEntityDescription entityForName:@“Page”在managedObjectContext:self.managedObjectContext中];
[FetchRequestSetEntity:entity];
//将批次大小设置为合适的数字。
[fetchRequest setFetchBatchSize:20];
//根据需要编辑排序键。
NSSortDescriptor*sortDescriptorName=[[NSSortDescriptor alloc]initWithKey:@“升序:是];
NSArray*sortDescriptors=[[NSArray alloc]initWithObjects:sortDescriptorName,nil];
[FetchRequestSetSortDescriptors:sortDescriptors];
//如果合适,请编辑节名称密钥路径和缓存名称。
//对于节名称键路径,nil表示“无节”。
NSFetchedResultsController*aFetchedResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@“缓存名称:@]”;
aFetchedResultsController.delegate=self;
self.fetchedResultsController=aFetchedResultsController;
[aFetchedResultsController释放];
[请求释放];
[sortDescriptorName发布];
[sortDescriptors发布];
n错误*错误=nil;
如果(![self.fetchedResultsController性能检测:&错误])
{
NSLog(@“未解决的错误%@,%@”,错误,[error userInfo]);
中止();
}
    #import "PagesCollectionViewController.h"
    #import "PageFlipperAppDelegate.h"
    @implementation toolBar
    - (void)drawRect:(CGRect)rect {}
    @end
    @implementation PagesCollectionViewController
    @synthesize editMode;
    @synthesize fetchedResultsController=__fetchedResultsController;
    @synthesize managedObjectContext=__managedObjectContext;
    -(void)viewWillAppear:(BOOL)animated{
        if (![[NSUserDefaults standardUserDefaults] integerForKey:@"integerKey"]) {
            [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"integerKey"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            QuickStart*stickieViewController = [[[QuickStart alloc]init]autorelease];
            stickieViewController.delegate = self;
            stickieViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
            [self presentModalViewController:stickieViewController animated:YES];
        }

        [[self navigationController] setNavigationBarHidden:NO animated:NO];
        [[self navigationController] setToolbarHidden:NO animated:NO];
        [[[self navigationController] toolbar] setBarStyle:UIBarStyleBlackTranslucent];
        [self setToolbarItems:[NSArray arrayWithObjects:
                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],

                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playSlideShow)]autorelease],

                               [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
                               nil]];

        [(CollectionView*)[self view] setCanReloadData:YES];
        [(CollectionView*)[self view]layoutSubviews];

    }
    - (NSFetchedResultsController *)fetchedResultsController
    {
        if (__fetchedResultsController != nil)
        {
            return __fetchedResultsController;
        }

        /*
         Set up the fetched results controller.
         */
        // Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Page" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        // Set the batch size to a suitable number.
        [fetchRequest setFetchBatchSize:20];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"<sort key>" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorName, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Edit the section name key path and cache name if appropriate.
        // nil for section name key path means "no sections".
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"<section name key path>" cacheName:@"<cache name>"];
        aFetchedResultsController.delegate = self;

        self.fetchedResultsController = aFetchedResultsController;

        [aFetchedResultsController release];
        [fetchRequest release];
        [sortDescriptorName release];
        [sortDescriptors release];

        NSError *error = nil;
        if (![self.fetchedResultsController performFetch:&error])
        {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }

        return __fetchedResultsController;
    }


    // because the app delegate now loads the NSPersistentStore into the NSPersistentStoreCoordinator asynchronously
    // we will see the NSManagedObjectContext set up before any persistent stores are registered
    // we will need to fetch again after the persistent store is loaded
    - (void)reloadFetchedResults:(NSNotification*)note {
        NSError *error = nil;
        if (![[self fetchedResultsController] performFetch:&error]) {

            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }             

        if (note) {
            [(CollectionView*)[self view] setCanReloadData:YES];
            [(CollectionView*)[self view]layoutSubviews];
        }
    }
    -(void) playSlideShow{
        SlideShowViewController *slideShowViewController = [[[SlideShowViewController alloc] init]autorelease];
        NSMutableArray *tempArrayOfImages = [[[NSMutableArray alloc] init]autorelease];
        for (int i = 0; i < [[dataSource pages]count]; i++) {
            if ([[[dataSource pages] objectAtIndex:i] thumbnail] != nil) {
                [tempArrayOfImages addObject: [[[dataSource pages] objectAtIndex:i] thumbnail]];
            }

        }

        [[self navigationController] pushViewController:slideShowViewController animated:YES];
        [slideShowViewController setImagesInImageViewer:tempArrayOfImages];
    }
    -(void)dismissQuickStart{
        [self dismissModalViewControllerAnimated:YES];
    }
    - (id)initWithManagedObjectContext:(NSManagedObjectContext *)managedObjectContext
    {
        if ((self = [super initWithNibName:@"CollectionView" bundle:nil]))
        {
            if (editMode == NO) {
                [self finishEditToolBars];
            }
            [self setTitle:@"Doodles"];
            viewController = [[PageViewController alloc] initWithManagedObjectContext:managedObjectContext];
            dataSource = [[PagesDataSource alloc] initWithManagedObjectContext:managedObjectContext];
            CGSize itemViewMarginSize = CGSizeMake(25.0, 0.0);
            [(CollectionView *)[self view] setItemViewMarginSize:itemViewMarginSize];
            PrototypeView *pro = [[[PrototypeView alloc] init] autorelease];
            [(CollectionView *)[self view] setItemViewPrototype:pro];
            [(CollectionView *)[self view] setFlowDirection:CVFlowDirectionVertical];
            [(CollectionView *)[self view] setItemViewFrameSize:CGSizeMake(([(CollectionView *)[self view] bounds].size.width - 3*itemViewMarginSize.width)/3.4, ([(CollectionView *)[self view] bounds].size.height - 3*itemViewMarginSize.height)/3.6)];
            [self setShadowAndColor];
        }
        return self;
    }
    -(void)setShadowAndColor{
        CollectionView *collectionView = (CollectionView *)[self view];
        [collectionView setShadowColor:[UIColor blackColor]];
        [collectionView setShadowRadius:6.0f];
        [collectionView setShadowOpacity:0.5f];
    }

    - (void)add:(id)sender
    {

        [dataSource add:sender];
        CollectionView *collectionView = (CollectionView *)[self view];
        // [collectionView reloadData];
        //  [collectionView scrollItemIndexToVisible:[self countOfItemsInCollectionView:collectionView]-1 animated:NO];

        [collectionView.dataDelegate collectionView:collectionView didSelectItemAtIndex:[self countOfItemsInCollectionView:collectionView]-1];
        //CollectionViewController *c;
        //   [[c transitionToDetailViewController:[c collectionView:self detailViewControllerForItemAtIndex:(NSUInteger)[self countOfItemsInCollectionView:collectionView]-1] forItemView:[itemViews objectForKey:[NSString stringWithFormat:@"%u", [self countOfItemsInCollectionView:collectionView]-1]]]];
        //  [c transitionToDetailViewController:self forItemView:collectionView.itemViews;
        editMode = NO;
        //collectionView.canUpdateLayout = YES;
        collectionView.canReloadData = YES;
        [(CollectionView*)[self view]layoutSubviews];



    }


    - (NSUInteger)countOfItemsInCollectionView:(CollectionView *)collectionView { return [[dataSource pages] count]; }

    - (id)collectionView:(CollectionView *)collectionView representedObjectAtIndex:(NSUInteger)itemIndex { 
        return [[dataSource pages] objectAtIndex:itemIndex]; 
    }

    - (void)collectionView:(CollectionView *)collectionView didSelectItemAtIndex:(NSUInteger)itemIndex
    {

        if (editMode == YES) {
            [collectionView yellowdidSelectItemAtIndex:itemIndex];
            //  NSLog(@"edit");
        }else{

            PVPage *selectedPage = [[[dataSource pages] objectAtIndex:itemIndex]autorelease];
            PageView *pageView = [[[PageView alloc] init] autorelease];
            [pageView setRepresentedPage:selectedPage];

            //   UIImage *i = [UIImage imageWithData: [[pageView representedPage] thumbnail]];
            // UIImageView *ii = [[[UIImageView alloc] initWithImage:i]autorelease];

            [viewController setView:pageView];
            //  [(PageView*)[viewController view] setBackgroundStrokes:ii];
            //NSLog(@"selected page %@",selectedPage);
            // [[[self navigationController] toolbar] setHidden:YES];
            //   [[[self navigationController] navigationBar] setHidden:YES];   
            //   [[[self tabBarController] tabBar] setHidden:YES]; 
            PageFlipperAppDelegate *appDelegate = (PageFlipperAppDelegate *)[[UIApplication sharedApplication] delegate];
            //  [(UiWindowSubclass *)appDelegate.window startTimer];
            [(UINavigationController *)[(UiWindowSubclass*)[appDelegate window] rootViewController] pushViewController:viewController animated:YES];
            //  viewController = nil;
            // [[self navigationController] setToolbarHidden:NO];
        }    
    }
    - (BOOL)collectionView:(CollectionView *)collectionView canDeleteItemAtIndex:(NSUInteger)itemIndex { 
        NSLog(@"itemIndex %u",itemIndex); 
        return YES; 

    }

    - (void)collectionView:(CollectionView *)collectionView didDeleteItemAtIndex:(NSUInteger)itemIndex
    {
        [dataSource removePageAtIndex:itemIndex];
    }


    -(void)trash{
        // NSLog(@"trash");
        [(CollectionView *)[self view] trashitems];
    }
    -(void)done{

        [(CollectionView *)[self view]  yellowdidSelectItemAtIndexUndo];
        [(CollectionView *)[self view] shakedidRemoveSelectItemAtIndex];
        [(CollectionView *)[self view] donereset];
        [self finishEditToolBars];

    }
    -(void) finishEditToolBars{
        [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)] autorelease]];
        [[self navigationItem] setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(didHoldItem)] autorelease]];

        editMode = NO;
    }
    -(void)duplicatePage{
        NSArray *tempArray = [[[(CollectionView*)[self view] selectedItemsArray]copy]autorelease];
        //    for (int i =0; i<[[(CollectionView*)[self view] selectedItemsArray]count]; i++) {
        //        [(CollectionView *)[self view]  yellowdidSelectItemAtIndex:i];
        //        
        //    }
        [dataSource duplicatePage:[[[NSArray alloc] initWithArray:tempArray]autorelease]];
        CollectionView *collectionView = (CollectionView *)[self view];
        editMode = NO;
        [self done];
        // [(CollectionView *)[self view]  yellowdidSelectItemAtIndexUndo];
        collectionView.canReloadData = YES;
        [collectionView layoutSubviews];



    }
    -(void)didHoldItem{
        [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)] autorelease]];
        //    [[self navigationItem] setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(trash)] autorelease]];
        toolBar* tools = [[toolBar alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)];
        tools.barStyle = UIBarStyleBlackTranslucent;
        tools.opaque = NO;
        //tools.backgroundColor = [UIColor clearColor];
        // create the array to hold the buttons, which then gets added to the toolbar
        NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

        // create a standard "add" button
        UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(trash)];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];
        [bi release];

        // create a spacer
        bi = [[UIBarButtonItem alloc]
              initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
        [buttons addObject:bi];
        [bi release];

        // create a standard "refresh" button
        bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(duplicatePage)];
        bi.style = UIBarButtonItemStyleBordered;
        [buttons addObject:bi];
        [bi release];

        // stick the buttons in the toolbar
        [tools setItems:buttons animated:NO];

        [buttons release];

        // and put the toolbar in the nav bar
        self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:tools] autorelease];
        [tools release];
        [(CollectionView*)[self view] setOldItemIndex:-1];
        editMode = YES;
        [(CollectionView*)[self view] setEditMode:YES];
        [(CollectionView*)[self view] shakedidSelectItemAtIndex];
    }
    -(void)didReceiveMemoryWarning{
        // NSLog(@"mem");
    }
    - (void)dealloc
    {   [dataSource release],dataSource = nil;
        [viewController release],viewController = nil;

        [super dealloc];
    }
    -(void)viewDidAppear:(BOOL)animated{

        [ (CollectionView*) [self view] setCanReloadData:YES];
        [(CollectionView*) [self view]  layoutSubviews];
    }
    -(void) viewDidLoad{

        CollectionView *collectionView = (CollectionView *)[self view];
        collectionView.canReloadData = YES;
        [(CollectionView*)[self view]layoutSubviews];
        editMode = NO;
        collectionView.editMode = NO;



    }
    @end