【问题标题】:NSMutableArray object works on simulator but not on device [closed]NSMutableArray 对象适用于模拟器但不适用于设备[关闭]
【发布时间】:2012-08-06 01:49:01
【问题描述】:

所以我有一个类,此时它只包含一个简单的 NSMutableArray 对象。我正在从视图控制器设置这个对象,但由于某种原因......这愚蠢的东西在我的 ipad 上不起作用。然而,它在模拟器上完美运行。

有没有人遇到过这种情况?

我知道这并不是很多事情,但任何关于在哪里寻找的提示/指针都会有所帮助。不知道在这个上搜索什么。

谢谢


ViewController.h

#import "DBEntries.h"
DBEntries *dbEntries;

ViewController.m:

[database open];

NSMutableArray *arrayAdder = [[NSMutableArray alloc] init];

NSString *filterNameFirst = [NSString stringWithFormat:@"%@", nameFirstTextField.text];
NSString *filterNameLast = [NSString stringWithFormat:@"%@", nameLastTextField.text];

NSString *filterStringFirst = [NSString stringWithFormat:@"%%%@%%", filterNameFirst]; // Works on first name only.
NSString *filterStringLast = [NSString stringWithFormat:@"%%%@%%", filterNameLast]; // Works on last name only.

FMResultSet *results = [database executeQuery:[NSString stringWithFormat:@"SELECT * FROM users WHERE firstname LIKE ? AND lastname LIKE ?", filterStringFirst, filterStringLast]];

while([results next])
{
    NSString *firstname = [results stringForColumn:@"firstname"];
    NSString *lastname = [results stringForColumn:@"lastname"];

    // Add db entries to array in DBEntries.
    NSString *objectAdder = [NSString stringWithFormat:@"%@ %@", firstname, lastname];
    NSLog(@"objectAdder: %@", objectAdder);
    [arrayAdder addObject:objectAdder];
}

[dbEntries setUsersFiltered:arrayAdder];
[arrayAdder release];

[database close];

isUpdatingEntriesForTableView = YES;

[dbTableView reloadData];

NSLog(@"dbEntries.usersFiltered: %@", dbEntries.usersFiltered); // This logs 0 on device, but works on simulator.

class.h:

NSMutableArray *usersFiltered;
@property (strong, nonatomic) NSMutableArray *usersFiltered;

类.m:

@synthesize usersFiltered;

【问题讨论】:

  • 请发布一些相关代码,以便我们确定可能出现的问题。
  • 正如您自己所说,没有代码和您所看到的错误,这里没有任何人可以帮助您。
  • 这个概念就是我所指的......但是好的,我用一些代码更新了主帖。没有错误或任何东西。它只是不更新​​数组。所以 usersFiltered 数组返回 0。这是一个非常基本的设置,我只是好奇是否有人遇到过类似的情况,类变量不会在设备上设置,但会在模拟器上设置。
  • 这只是一个猜测,但请尝试查看保存包含数据的 SQlite 文件的位置。尝试从模拟器中删除该应用程序并重新安装,如果它仍然有效,则不是 SQLite 问题。尝试在你的 iPad 上做同样的事情。同样,截至目前,这是我最好的猜测。您能否在您的核心数据模型上发布更多代码?
  • 究竟是什么不起作用?它是否崩溃,数组是否为空?另外,您如何打开数据库。我感觉这和你的问题有很大关系。顺便说一句,您的查询看起来很奇怪,您使用? 作为占位符,但这对stringWithFormat: 没有任何影响。如果该查询以您期望的方式在任何地方工作,我会感到惊讶。

标签: objective-c ios nsmutablearray


【解决方案1】:

我不使用 strong 进行自动内存计数,我只是不喜欢它。你试过了吗

@property (retain, nonatomic) NSMutableArray *usersFiltered;

您可以替换以下行:

[dbEntries setUsersFiltered:arrayAdder];
[arrayAdder release];

与:

dbEntries.usersFiltered = [arrayAdder autorelease];
//[arrayAdder release];

【讨论】:

  • 没有工作。感谢您尝试提供帮助。我很感激。
  • 顺便说一句,您的评论背后的逻辑是什么?根据 ARC 过渡指南……强是新批准的方式。反正据我所知。
  • 我只是个老派 :p
【解决方案2】:

哇。好的,所以答案与@omz 的观点有关。我不应该使用 [NSString stringWithFormat]。将其删除为 FMResultSet *results = [database executeQuery:@"SELECT * FROM users WHERE firstname LIKE ? AND lastname LIKE ?", filterStringFirst, filterStringLast]; 现在不会触发警告并在设备上工作。有趣的是它可以在模拟器上运行,但之前不能在设备上运行。

【讨论】:

  • 感谢大家的帮助!我喜欢这个地方。
猜你喜欢
  • 2012-11-01
  • 2011-03-08
  • 2015-02-13
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多