标签: nsmanagedobject

如何设置从其他属性计算的NSManagedObject的Custom属性?

我正在使用核心数据框架来管理对象.我有一个实体,它有几个十进制类型的属性.其中包括从其他属性数学计算的属性.例:

@interface Marks :  NSManagedObject  
{  
}

@property (nonatomic, retain) NSDecimalNumber * answerGradeA;  
@property (nonatomic, retain) NSDecimalNumber * answerGradeB;  
@property (nonatomic, retain) NSDecimalNumber * answerGradeC;  
@property (nonatomic, retain) NSDecimalNumber * total;
Run Code Online (Sandbox Code Playgroud)

我想要属性total = 3xanswerGradeA + 2xanswerGradeB + 1xanswerGradeC.

如果有可能这样做,那怎么样?

iphone core-data objective-c nsmanagedobject

1
推荐指数
1
解决办法
4537
查看次数

ID为[...]的NSManagedObject已失效

我正在使用核心数据构建应用程序.由appDelegate加载的我的RootViewController主要来自模板.但是我已将实体名称更改为"Clocks"并添加了一堆行.

我的RootViewController提供了一个带有UINavigationController的MVC.当我将数据保存到我的数据库时,UINavigationController类使用[[UIApplication sharedApplication]delegate]来保存数据以访问我的appDelegate,它实际上预先执行了保存操作.编辑数据的方式相同,但不是在我的app委托中调用insert函数,而是调用update函数.

现在,这一切都很好..实际上完全正确.但是......几次打开编辑并保存在视图中我的应用程序崩溃了.它在模拟器和我的iPhone 4上都是这样做的.这是我的意思的一个例子(电影):http://dl.dropbox.com/u/3077127/has_been_invalidated.mov

这是我的RootViewController.m的代码:

#import "RootViewController.h"
#import "RootViewControllerClockCell.h"
#import "RootViewControllerClockCellFooter.h"
#import "configuration.h"
#import "AddClockViewController.h"
#import "clockAppDelegate.h"

#import "AddClockNavigationController.h"

@interface RootViewController ()
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
@end


@implementation RootViewController

@synthesize fetchedResultsController=fetchedResultsController_, managedObjectContext=managedObjectContext_;


#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setTitle:NSLocalizedString(@"Alarms", @"AddClockNavigationController")];

    // Set up the edit and add buttons.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAddAlarmView)];
    self.navigationItem.rightBarButtonItem = addButton;
    [addButton release];

    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; …
Run Code Online (Sandbox Code Playgroud)

core-data nsmanagedobject nsmanagedobjectcontext ios4 ios

1
推荐指数
1
解决办法
4268
查看次数

只有在没有关系的情况下才能正确处理对象的删除?

我有一个Person属于Department一对多关系的实体.

我希望能够删除Department时,有没有更多的Person与它(或者通过缺失的相连的S Person实体,或更改了Persondepartment属性).现在,我正在尝试使用以下处理程序NSManagedObjectContextObjectsDidChangeNotification(目前只是尝试查看删除,并正确删除):

- (void)managedObjectDidChange:(NSNotification *)notification {

    NSSet *updatedObjects = [[notification userInfo] objectForKey:NSDeletedObjectsKey];
    for (NSManagedObject *obj in updatedObjects) {
        if ([obj.entity.name isEqualToString:@"Person"]) {
            NSLog(@"Person Changed");

            NSManagedObject *department = [(Person *)obj department];
            NSLog(@"%i", [[department valueForKey:@"person"] count]);

            if ([[department] valueForKey:@"person"] count] == 0) {
                NSLog(@"Department has no more people associated with it");
                // deletion code
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我删除某个人时,与该部门相关联的人数不会改变.我没有对Department实体进行提取.那是我应该做的吗?

cocoa cocoa-touch core-data nsmanagedobject nsmanagedobjectcontext

1
推荐指数
1
解决办法
854
查看次数

目标C:在非结构或联合的东西中请求成员XXX.(核心数据)

我在实现核心数据时遇到了这个错误.

我创建了一个实体'FlashCard',其属性为'question'和'answer'.这两个属性都是NSString类型.

在将新对象插入NSManaged Object后,我尝试设置2个属性,如下所示.

 NSManagedObject *newCard = [NSEntityDescription insertNewObjectForEntityForName:@"FlashCard" inManagedObjectContext:self.managedObjectContext];
 newCard.question = thisQuestion;
 newCard.answer = thisAnswer;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译代码时,我遇到错误"请求成员'问题'在某些东西不是结构或联合'.我得到相同的错误newCard.answer行.

任何关于如何解决这个问题的建议非常感谢!

cocoa-touch core-data objective-c nsmanagedobject

1
推荐指数
1
解决办法
675
查看次数

Core Data Managed Object属性返回null

这可能是一个非常简单的问题.我在sql lite db中有很多东西.我可以检索那些东西并将其存储到一个阵列就好了.当我使用i迭代遍历该数组时,for (MyCustomMo *mo in myDataArray)我可以使用例如mo.name来访问托管对象属性.

到目前为止一切正常,但......

后来当我从同一个数组中获取一个对象时,[myDataArray objectAtIndex:index]我得到一个MyCustomMo*但是当我尝试访问该对象的属性时,我得到null.我需要以[myDataArray objectAtIndex]某种方式使用不同的方式吗?

xcode core-data objective-c nsmanagedobject

1
推荐指数
1
解决办法
2411
查看次数

从NSOperationQueue取消NSOperation

我已经从网址下载了信息,我将这个网址作为NSOperation在NSOperationQueue中发送,我想知道,如何删除特定的NSOperation以下载特定网址的数据,现在我这样做:

AppDelegate *appController = (AppDelegate *) [[UIApplication sharedApplication] delegate];

    for (NSOperation *op in appController.seriesQueue.operations) {

        if ([op isKindOfClass:[MyDowndload class]]) {

            MyDownload *urlInDownload = (MyDowndload *)op;

            if ([urlInDownload.myNew.urlName isEqualToString:[managedObject valueForKey:@"urlName"]] && [urlInDownload.myNew.language isEqualToString:[managedObject valueForKey:@"language"]]) {
                [op cancel];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在tableview中有信息,所以当我为索引路径删除一行时,我输入此检查,并在[op cancel]行中输入,但我可以在控制台日志中看到该线程仍在下载,如何我能停下来删除吗?

iphone nsoperation nsoperationqueue nsmanagedobject ios

1
推荐指数
1
解决办法
7715
查看次数

使用NSManagedObject的EXC_BAD_ACCESS

我试图在多个表中插入值(准确地说是25),我能够在所有表中插入记录,除了一个,这是因为一个属性,如果我删除该属性,它开始保存数据到表中但是当我添加该属性并尝试设置其值时,它以EXC_BAD_ACCESS终止.

我尝试更改属性的名称,甚至表格,但没有工作.下面是我的代码::

Ashes *ashesObj = (Ashes *)[NSEntityDescription insertNewObjectForEntityForName:@"Ashes" inManagedObjectContext:managedObjectContext];

[ashesObj setAshes_id:@""];
[ashesObj setArrangement_id:@"34"];
[ashesObj setCasket_order_date:@""];
[ashesObj setCasket_model:@""];
[ashesObj setCasket_supplier:@""];
//[ashesObj setAshes_address:@"N/A"];    (This one is causing problem)
[ashesObj setPostal_code:@"N/A"];
[ashesObj setName_client:@""];
[ashesObj setTelephone:@""];
[ashesObj setEmail:@""];

    NSError *error;

if (![managedObjectContext save:&error])
{
    NSLog(@"Problem saving: %@", [error localizedDescription]);
}
Run Code Online (Sandbox Code Playgroud)

iphone core-data nsmanagedobject nsentitydescription

1
推荐指数
1
解决办法
1277
查看次数

当我不为Core Data标量属性编写访问器方法时会发生什么?

我正在使用几个用于生成NSManagedObject子类的Core Data实体,当我生成这些类时,我选择了"使用原始数据类型的标量属性"选项.正如所料,整数属性被声明为int16_t属性,浮点float属性在生成的接口中被声明为属性:

@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end
Run Code Online (Sandbox Code Playgroud)

在为此接口生成的实现中,我看到这些属性声明为@dynamic:

@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end
Run Code Online (Sandbox Code Playgroud)

现在,根据Core Data文档,我应该为这些标量属性编写访问器方法,因为Core Data无法为我生成它们:

您可以将属性声明为标量值,但对于标量值,Core Data无法动态生成访问器方法 - 您必须提供自己的实现(请参阅"托管对象访问器方法"(第44页)).Core Data自动合成原始访问器方法(primitiveLength和setPrimitiveLength :),但您需要声明它们以禁止编译器警告.

这一切都是有道理的,我可以看到很多SO帖子询问如何编写这些访问器方法,并提供了很多好的答案.

我无法弄清楚的是:我编写了这段代码并在我阅读文档中的这个细节之前就开始使用它,所以我从未编写任何访问器方法.我只是在我的类实现中有@dynamic声明.尽管没有编写我应该需要的访问器方法,代码似乎工作得很好.我已经创建了这个NSManagedObject子类的实例.我已经发送了此类的实例setPointsScored:pointsScored消息,并将生成的实例保存到其持久性存储中.一切似乎都有效.

我在这里错过了什么?是否存在生成的默认实现,尽管Core Data文档说明了什么?是否会出现我当前的代码无法正常工作的情况?在编写更多NSManagedObject子类之前,我很想了解这里发生了什么......

core-data objective-c nsmanagedobject

1
推荐指数
1
解决办法
774
查看次数

获取从Core Data加载数据的具体价值?

我从Core Data获取实体,但我无法访问对象值来分配变量等.

这是我的代码:

    @IBAction func loadItem(sender: UIButton) {

    let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    let context: NSManagedObjectContext = appDel.managedObjectContext

    let request = NSFetchRequest(entityName: "Words")
    request.returnsObjectsAsFaults = false


    do {
        let results:NSArray = try context.executeFetchRequest(request)

        for res in results{

            print(res)
            print(res.word)

        }


    } catch {
        print("Unresolved error")
        abort()
    }


}
Run Code Online (Sandbox Code Playgroud)

print(res)工作正常,并在控制台中给我对象:

<NSManagedObject: 0x7ff0095355f0> (entity: Words; id: 0xd000000000040000 <x-coredata://0E645702-9493-4D1A-8D55-4482B7948054/Words/p1> ; data: {
image = <89504e47 0d0a1a0a 0000000d 49484452 00000a6c 000006ec 08020000 009fcbb9 fc000001 18694343 50494343 2050726f 6669>;
word = test;
}) …
Run Code Online (Sandbox Code Playgroud)

core-data nsmanagedobject ios swift

1
推荐指数
1
解决办法
1869
查看次数

从不同核心数据实体获取数据并将结果转换为相应类的通用方法

我正在写一个通用的方法与给定的从核心数据实体获取数据entityNamepredicatesortDescriptors。我想将结果作为请求实体的数组返回。如果我给Student作为entityName,则需要返回如下所示的学生数组,

do {
        if let results = try CoreDataController.sharedInstance.masterManagedObjectContext.fetch(request) as? [Student] {

            if results.count > 0 {

                return results
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是,在使用给定实体名称的通用方法中,如何将结果转换为相应实体类的数组?

我试图从实体名称生成类,

let coreDataClass = NSClassFromString(entityName) as! NSManagedObject.Type
Run Code Online (Sandbox Code Playgroud)

但这不在数组声明中(在以上代码中的Student中)。请帮助我找到正确的方法。

提前致谢!

casting core-data nsmanagedobject ios swift

1
推荐指数
1
解决办法
766
查看次数