val*_*u17 3 objective-c realm ios
我正在浏览寻找一个解决方案,在我的一个应用程序中实现一个小型离线数据存储,这将很容易和快速使用.无论如何,我遇到了Realm这样做.但是,我遇到的问题是,每次启动应用程序时,数据库中的内容都为空.
我做了所有的分配并调用了beginWriteTransaction方法.设置我的数据库变量值.然后,我将对象添加到领域,最后是commitWriteTransaction.
所以,我做一个NSLog来查看该值是否实际设置正确(在我的应用程序中更新之后).但是当我关闭我的应用程序或停止并在xcode iphone5模拟器中再次运行它.我尝试在viewDidLoad方法中设置数据库中的值到我的应用程序中的全局变量.我执行的NSLog来检查值是在我的数据库或全局变量,但它显示为空,也没有得到店/保存的意义.
这是代码..
@interface iReceiptDataBase : RLMObject
@property NSString* receiptNo;
@end
RLM_ARRAY_TYPE(iReceiptDataBase)
@implementation iReceiptDataBase
@end
//******** View Controller Implementation ************
- (void)viewDidLoad {
self.realm = [RLMRealm defaultRealm]; // property type RLMRealm
[realm beginWriteTransaction];
self.myDataBase = [[iReceiptDataBase alloc] init]; // property type iReceiptDataBase
receiptNumber = [myDataBase.receiptNo intValue];
NSLog(@"In my realm database(first call) -> %@", myDataBase.receiptNo);
NSLog(@"In my local app(first call) -> %d", receiptNumber);
}
-(void)drawPDF:(NSString*)fName {
receiptNumber += 1; // property type int
myDataBase.receiptNo = [NSString stringWithFormat:@"%d", receiptNumber];
NSLog(@"In my realm database(second call) -> %@", myDataBase.receiptNo);
}
- (void)viewWillDisappear:(BOOL)animated {
[realm addObject:myDataBase];
[realm commitWriteTransaction];
}
Run Code Online (Sandbox Code Playgroud)
我还会考虑任何其他选项来实现这一点..谢谢!
*****UPDATE!**这是我在我的测试中得到的,我在两种方法中改为执行beginWriteTransaction和commitWriteTransaction,但仍然无效.它获取了我在我的应用程序中提供的值,但是当我再次访问它时,它不会从数据库中提取/获取该值,如果它曾经存储过..

您的领域对象的问题在于您没有查询对象的领域.相反,您只是分配一个新iReciptDataBase对象.您首先需要向该对象添加一个属性,以便您能够查询它,如下databaseId所示:
@interface iReceiptDatabase : RLMObject
@property NSString *receiptNo;
@property NSString *databaseId;
@end
@implementation iReceiptDatabase
@end
RLM_ARRAY_TYPE(iReceiptDatabase)
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad中,首先查询现有对象的领域文件,然后只有在找不到它之后,才会分配它:
- (void)viewDidLoad {
[super viewDidLoad];
RLMRealm *realm = [RLMRealm defaultRealm];
iReceiptDatabase *myDatabase = [[iReceiptDatabase objectsWhere:@"databaseId = '1'"] firstObject];
if(!myDatabase) {
[realm beginWriteTransaction];
myDatabase = [[iReceiptDatabase alloc] init];
myDatabase.receiptNo = @"1";
myDatabase.databaseId = @"1";
[realm addObject:myDatabase];
[realm commitWriteTransaction];
}
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |