Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Objective c 为什么,当我初始化一个NSArray时,它最终是空的吗?_Objective C_Ios5_Nsarray - Fatal编程技术网

Objective c 为什么,当我初始化一个NSArray时,它最终是空的吗?

Objective c 为什么,当我初始化一个NSArray时,它最终是空的吗?,objective-c,ios5,nsarray,Objective C,Ios5,Nsarray,我是一个新手,所以如果它被证明是愚蠢的事情,我不会感到惊讶,但我正把头撞在墙上,试图弄明白为什么NSArray haikuArray在我尝试初始化WithObjects之后,从来没有包含任何对象。有什么想法吗 Gay_HaikuViewController.h文件: #import <UIKit/UIKit.h> #import "Array Setup.h" @interface Gay_HaikuViewController : UIViewController { Array

我是一个新手,所以如果它被证明是愚蠢的事情,我不会感到惊讶,但我正把头撞在墙上,试图弄明白为什么NSArray haikuArray在我尝试初始化WithObjects之后,从来没有包含任何对象。有什么想法吗

Gay_HaikuViewController.h文件:

#import <UIKit/UIKit.h>
#import "Array Setup.h"

@interface Gay_HaikuViewController : UIViewController
{
Array_Setup *gayHaikuSetup;
Array_Setup *userHaikuSetup;
NSMutableArray *allHaiku;
IBOutlet UITextView *haikuText;
}

@property (nonatomic,retain) Array_Setup *gayHaikuSetup;
@property (nonatomic,retain) Array_Setup *userHaikuSetup;
@property (nonatomic,retain) NSMutableArray *allHaiku;
@property (nonatomic,retain) IBOutlet UITextView *haikuText;
-(IBAction)nextHaiku:(id)sender;

提前感谢大家的帮助。

initWithObjects
返回一个值,但您没有将
array
设置为返回值。

此代码中存在严重问题:

arrayOfUserHaiku = [NSMutableArray alloc];
[arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
    NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else 
{
    NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}
  • 切勿拆分
    alloc
    init
    init
    方法有时(通常,实际上)不会返回与
    alloc
    返回的对象相同的对象。也就是说,这应该是:

    arrayOfUserHaiku=[[NSMutableArray alloc]initWithContentsOfFile:@/tmp/cool.txt]

  • 错误
    不会由该代码中的任何内容设置;这不是一个全球性的问题

  • 该方法应该返回一个自动释放的数组(假设为非ARC)

  • 您应该避免在代码中使用大型静态字符串数组。将它们作为plist或文本文件放入应用程序包装器中,可以轻松本地化

  • (而且,正如评论员所建议的,不要把你的应用程序的内容放在问题中——有些人可能会觉得它令人反感)

    Array\u Setup.m文件:

    #import "Array Setup.h"
    
    @implementation Array_Setup
    
    @synthesize arrayOfGayHaiku,arrayOfUserHaiku;
    
    -(NSMutableArray *)readFromUserArray
    {
    arrayOfUserHaiku = [NSMutableArray alloc];
    [arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
    NSError *error = nil;
    if (!arrayOfUserHaiku)
    {
        NSLog(@"Read failed: %@.",[error localizedDescription]);
    }
    else 
    {
        NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
    }
    return arrayOfUserHaiku;
    }
    
    -(NSArray *)readFromGayArray
    {
    NSArray *array = [NSArray alloc];
    [array initWithObjects:@"Lorem", @"ipsum", nil]; 
    
    return array;
    }
    
    @end
    
       #import "Array_Setup.h"
    
    @implementation Array_Setup
    
    @synthesize arrayOfGayHaiku,arrayOfUserHaiku;
    
    -(NSMutableArray *)readFromUserArray
    {
        arrayOfUserHaiku = [[NSMutableArray alloc] initWithContentsOfFile:@"/tmp/cool.txt"];
     //   [arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
        NSError *error = nil;
        if (!arrayOfUserHaiku)
        {
            NSLog(@"Read failed: %@.",[error localizedDescription]);
        }
        else 
        {
            NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
        }
        return arrayOfUserHaiku;
    }
    
    -(NSArray *)readFromGayArray
    {
        NSArray *array = [NSArray arrayWithObjects:@"I don't understand.\nYou love it when I do that--\nWait, no.  That's Stephen.",
    
         @"Frantically hiding\nPorno and Mapplethorpe prints--\nMom is on her way.",
    
         @"Remember when I\nSaid I disliked oral sex?\nI meant just with you.",
    
         @"You were perfection.\nThen you misspelled 'embarrassed.'\nDon't call me again.",
    
         //Am omitting a bunch of these to make my Stack Overflow question shorter.
    
         @"I know you think I\nLike it when you slap my ass.\nYou are mistaken.",
    
         @"Flailing to the beat--\nCould I possibly look half\nAs dumb as I feel?",
    
         @"Last night, you looked hot.\nToday, you want to discuss\nThe whole foods movement.", nil]; 
    
        return array;
    }
    
    @end
    
    Gay_HaikuViewController.m文件:

    #import "Gay_HaikuViewController.h"
    #import "Array Setup.h"
    
    @interface Gay_HaikuViewController ()
    
    @end
    
    @implementation Gay_HaikuViewController
    
    @synthesize gayHaikuSetup,userHaikuSetup,allHaiku,haikuText;
    
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    
    NSArray *haikuArray = [gayHaikuSetup arrayOfGayHaiku];
    haikuArray = [gayHaikuSetup readFromGayArray];
    //This next line is how I know there are no objects in haikuArray.
    NSLog(@"%d",[haikuArray count]);
    NSMutableArray *userArray = [userHaikuSetup arrayOfUserHaiku];
    userArray = [userHaikuSetup readFromUserArray];
    allHaiku = [[NSMutableArray alloc] init];
    for (int i=0; i<[haikuArray count]; i++)
        [allHaiku addObject:[haikuArray objectAtIndex:i]];
    for (int i=0; i<[userArray count]; i++)
        [allHaiku addObject:[userArray objectAtIndex:i]];
    }
    
    userHaikuSetup= [[Array_Setup alloc] init];
    
    gayHaikuSetup= [[Array_Setup alloc] init]; // [gayHaikuSetup arrayOfGayHaiku];
    
    NSArray * haikuArray = [NSArray arrayWithArray: [gayHaikuSetup readFromGayArray]];
    //This next line I added to find out whether the array had any objects--I always get 0.
    NSLog(@"%lu",[haikuArray count]);
    
    NSMutableArray *userArray = [userHaikuSetup readFromUserArray];
    allHaiku = [[NSMutableArray alloc] init];
    for (int i=0; i<[haikuArray count]; i++)
        [allHaiku addObject:[haikuArray objectAtIndex:i]];
    for (int i=0; i<[userArray count]; i++)
        [allHaiku addObject:[userArray objectAtIndex:i]];
    
    
    NSLog(@"%lu",[allHaiku count]);
    
    userHaikuSetup=[[Array_Setup alloc]init];
    gayHaikuSetup=[[Array_Setup alloc]init];//[gayHaikuSetup arrayOfGayHaiku];
    NSArray*haikuArray=[NSArray ARRAY WITHARRAY:[gayHaikuSetup readFromGayArray]];
    //我添加了下一行来确定数组是否有任何对象——我总是得到0。
    NSLog(@“%lu”,[haikuArray计数]);
    NSMutableArray*userArray=[userHaikuSetup readFromUserArray];
    allHaiku=[[NSMutableArray alloc]init];
    
    对于(int i=0;i请使用lorem ipsum编辑数组中的文本。人们可能会觉得它令人反感。最好将它缩短为一行,因为代码不需要运行。完成。对此表示抱歉。好的。请原谅我不理解,但是
    initWithObjects
    返回的值是什么?我尝试了
    initWithObjects:count:
    但不断收到一条错误消息,要求在
    计数之前执行
    ,这没有任何意义——当我添加它时,它只是产生了另一条错误消息。@JoelDerfner:返回值是已初始化的对象。感谢所有这些。我正在使用ARC,但我已经实现了您的其余建议,并且它是正确的更干净。请看我的答案;您的代码可能会运行,但这并不意味着它是正确的。而且您的答案缺乏解释。
    userHaikuSetup= [[Array_Setup alloc] init];
    
    gayHaikuSetup= [[Array_Setup alloc] init]; // [gayHaikuSetup arrayOfGayHaiku];
    
    NSArray * haikuArray = [NSArray arrayWithArray: [gayHaikuSetup readFromGayArray]];
    //This next line I added to find out whether the array had any objects--I always get 0.
    NSLog(@"%lu",[haikuArray count]);
    
    NSMutableArray *userArray = [userHaikuSetup readFromUserArray];
    allHaiku = [[NSMutableArray alloc] init];
    for (int i=0; i<[haikuArray count]; i++)
        [allHaiku addObject:[haikuArray objectAtIndex:i]];
    for (int i=0; i<[userArray count]; i++)
        [allHaiku addObject:[userArray objectAtIndex:i]];
    
    
    NSLog(@"%lu",[allHaiku count]);