标签: nsarray

保留,分配,属性......让您的Obj-c生活更轻松的主题!

我的代码越多,我就越迷失...所以我决定为我(以及其他人)创建一个完全专注于内存管理的主题,不要浪费时间理解obj-c基础...我会将其更新为问了新问题!

以下是一些例子:

// myArray is property (retain)
myArray = otherArray;

//myArray isn't a property
myArray = otherArray;

//myArray is a property (retain)
myArray = [[NSArray alloc] init];

//myArray isn't a property
myArray = [[NSArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

---所以,如果我明白了......当你把self.myArray放到Xcode上时,你告诉Xcode使用getter或setter,但是当你做myArray时,你对一切负责,对吧?

[求助] UPDATE1:之间是否有区别:

//myArray is a property
myArray = otherArray; // it is only a reference, releasing otherArray will imply releasing myArray
self.myArray = otherArray; // otherArray is sent a retain message so releasing otherArray will still keep myArray in memory
Run Code Online (Sandbox Code Playgroud)

---是的,有区别(见上面的评论)

[已解决] …

iphone allocation equals retain nsarray

5
推荐指数
2
解决办法
1816
查看次数

如何对包含NSDictionary的NSArray进行排序?

我有一个像这样的plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>highscores</key>
 <array>
  <dict>
   <key>highscoreInSeconds</key>
   <string>9</string>
   <key>levelName</key>
   <string>1</string>
   <key>name</key>
   <string>Black</string>
  </dict>
  <dict>
   <key>highscoreInSeconds</key>
   <string>12</string>
   <key>levelName</key>
   <string>1</string>
   <key>name</key>
   <string>Black</string>
  </dict>
 </array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

现在我想按此排序highscoreInSeconds.

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *plistDirectory = [paths objectAtIndex:0];
 NSString* fullPath = [plistDirectory stringByAppendingPathComponent:@"data.plist"];

 NSMutableDictionary* pData = [[NSMutableDictionary alloc] initWithContentsOfFile:fullPath];
 NSMutableArray* highscores = [pData valueForKey:@"highscores"];
Run Code Online (Sandbox Code Playgroud)

我现在该如何排序?

非常感谢你!:)

祝你今天愉快.

PS:最后看起来应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist …
Run Code Online (Sandbox Code Playgroud)

sorting iphone nsdictionary nsarray

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

在NSArray中获取NSDictionary中的所有值

我有一个NSArray充满了NSDictionary对象,每个NSDictionary里面都有一个唯一的ID.我想根据ID查找特定字典,并在我自己的字典中获取该字典的所有信息.

myArray包含:

[index 0] myDictionary object
  name = apple,
  weight = 1 pound,
  number = 294,

[index 1] myDictionary object
  name = pear,
  weight = .5 pound,
  number = 149,

[index 3] myDictionary object (etc...)
Run Code Online (Sandbox Code Playgroud)

我想得到第二个字典对象的名称和重量(我不知道对象的索引...如果只有两个字母,我可以从中制作一个字典[myArray objectAtIndex:1])

所以,比方说我知道数字149.我怎样才能将myArray中的第二个myDictionary对象变成一个新的NSDictionary?

iphone objective-c nsdictionary nsarray

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

核心数据返回NSArrays而不是NSStrings

由于某种原因,所有NSString类型的属性都在我的Article对象中作为NSArrays返回.这是我检索它们的功能:

- (NSArray *)getSavedArticles
{
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    NSError *error = nil;
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    NSSortDescriptor *dateSort = [NSSortDescriptor sortDescriptorWithKey:@"last_opened" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:dateSort]];
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
    return fetchedObjects;
}
Run Code Online (Sandbox Code Playgroud) 我没有为这些创建NSManagedObjectModel,而是我只是使用KVO访问它们.

//self.data has the array returned from getSavedArticles
NSManagedObject *object = [self.data objectAtIndex:indexPath.row]; 
NSString *path  = [object valueForKey:@"path"];
NSString* id      = [object valueForKey:@"id"];
Run Code Online (Sandbox Code Playgroud)

当我在变量窗格中查看此内容时path,id我看到(__NSArrayI *) ... Variable is not a CFString. …

core-data nsarray ios

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

NSArray和NSString

我正在阅读的这本书让我写下面的代码:

-(IBAction)displaySomeText:(id)sender {
    NSString *cow = @"Milk";
    NSString *chicken = @"Egg";
    NSString *goat = @"Butter";

    NSArray *food = [NSArray arrayWithObjects:cow, chicken, goat, nil];

    NSString *string = @"The shopping list is: ";
    string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];

    [textView insertText:string];
Run Code Online (Sandbox Code Playgroud)

}

我理解数组如何工作,但我需要帮助理解以下代码

string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];
Run Code Online (Sandbox Code Playgroud)

我从来没有见过这样可能的实例.

他让我从NSString课堂上创建一个'字符串'对象,然后我就这样做了

string = [string stringByAppendingString:];
Run Code Online (Sandbox Code Playgroud)

我糊涂了.我从未见过一个示例,我在其中创建一个对象,然后对同一个对象执行一个方法并将其存储在完全相同的对象中.

例如,我知道我可以做到这一点

NSSound *chirp;
chirp = [NSSound soundNamed:@"birdChirp.mp3"];
Run Code Online (Sandbox Code Playgroud)

以上是有道理的,因为我使用了创建的对象并对其执行了类方法.

但我总是认为以下代码的等价物是不可能的

chirp = [chirp methodNameEtc..];
Run Code Online (Sandbox Code Playgroud)

我希望我能很好地解释我的问题.如果不是,我总是可以进一步阐述.

objective-c instance nsstring nsarray

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

使用SortDescriptor AND Predicate对NSMutableArray进行排序可能吗?

我有一个类型为"餐厅"的阵列,其NSSet为"等级".评级有ID和值.

我想通过ID为01,从高到低的等级对餐厅的数组进行排序.

类似于以下内容,但如何在originalArray上一起使用谓词和排序描述符?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Rating.rating_id=%d", ratingID];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"currentValue" ascending:YES];
NSArray *sorted = [[originalArray allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
Run Code Online (Sandbox Code Playgroud)

objective-c nsarray nssortdescriptor nspredicate

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

过滤NSArray字符串元素

所以,基本上我有一个NSArray.

我希望在过滤那些例如NOT以给定前缀开头的NOT之后得到一个包含初始数组内容的数组.

它认为使用filteredArrayUsingPredicate:是最好的方法; 但我不知道我怎么能这样做......

到目前为止这是我的代码(NSArray实际上是一个类别):

- (NSArray*)filteredByPrefix:(NSString *)pref
{
    NSMutableArray* newArray = [[NSMutableArray alloc] initWithObjects: nil];

    for (NSString* s in self)
    {
        if ([s hasPrefix:pref]) [newArray addObject:s];
    }

    return newArray;
}
Run Code Online (Sandbox Code Playgroud)

它是对Cocoa最友好的方法吗?我想要的是尽可能快的东西......

cocoa objective-c nsarray

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

如何将NSMutableArray转换为NSString?

我想将a(或复制?)NSMutableArray转换为a NSString.我想我的问题是我并不真正了解a的结构NSString.转换后我想将它附加到电子邮件正文中.这是我的代码:

- (IBAction)sendEmail
{
    NSLog(@"sendEmail");
    [textView resignFirstResponder];
    [textView1 resignFirstResponder];
    if ([MFMailComposeViewController canSendMail])
    {
        // set the sendTo address
        NSMutableArray *recipients = [[NSMutableArray alloc] initWithCapacity:1];
        [recipients addObject:@"example@yahoo.com"];
        MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
        controller.mailComposeDelegate = self;
        [controller setSubject:@"Iphone Game"];
        NSString *string = [string appendString:[NSString stringWithFormat:"%@", [viewArray objectAtIndex:i]]];
        [controller setMessageBody:string isHTML:NO];
        [controller setToRecipients:recipients];
        [self presentModalViewController:controller animated:YES];
        [controller release];
    }
    else 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
 message:@"Your device is not set up for email." delegate:self …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nsmutablearray nsarray ios

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

使用包含数字的字符串对NSMutableArray进行排序?

我有一个NSMutableArray,它保存了用户高分.我想以数字方式排列项目(数字存储在NSStrings中.)
示例:
4,2,7,8
到
2,4,7,8
如果数据存储在NSStrings中,最简单的方法是什么?

sorting objective-c nsarray

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

无法从一个特定屏幕问题导航仅在iOS 11中

应用程序导航到VC1到VC2,在VC2中"返回","菜单"和"提交"按钮在点击"提交"时显示一条带有消息的警报,单击"确定"按钮时显示"确定"按钮I'我试图弹出到VC1,代码正在执行但导航没有发生.

"返回"和"菜单"按钮也发生了同样的事情,代码正在执行,但没有导航到任何其他页面.使用Xcode 9 beta 6.

我在我的项目中使用的下面一段代码

NSArray *controllersArray = [[self navigationController] viewControllers];

        for(UIViewController *controller in controllersArray)
        {
            if ([controller isKindOfClass:[ViewController1 class]])
            {
                ViewController1 *accDetailVC = (ViewController1*)controller;
                [[self navigationController] popToViewController:accDetailVC animated:YES];
                break;
            }
        }
Run Code Online (Sandbox Code Playgroud)

在iOS 11 beta以外的其他iOS版本中工作.如果任何人面临同样的问题,请帮助我.

objective-c uiviewcontroller uinavigationcontroller nsarray ios11

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